100165772.htm
来自「C#高级编程(第三版),顶死你们。。 。up」· HTM 代码 · 共 620 行 · 第 1/3 页
HTM
620 行
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><title>
30.3.2 读写二进制文件
</title></head>
<body>
<div class="area">
<div class="col1">
<div class="lineBlue">
</div>
<!-- title -->
<div class="arcTitle">
<h1>
<a href="../16">
C#高级编程(第3版)【全文连载】
</a>
</h1>
<div style="text-align: center; font-size: 15px">
<a href="100165772.htm">
30.3.2 读写二进制文件
</a>
</div>
<div style="text-align: center; font-size: 15px">
<a class="url" href="../../default.htm">http://book.csdn.net/</a>
2006-10-13 14:41:00
</div>
<div style="margin: 0px auto; width: 700px; border: solid 1px #0b5f98;">
<div style="float: left; width: 16px; background-color: #0b5f98; color: White; padding: 1px;">
图书导读
</div>
<div style="float: right; width: 670px; text-align: left; line-height: 16pt; padding-left: 2px">
<!--导读-->
<h1 id="divCurrentNode" style="color: #b83507; width: 100%; text-align: left; font-size: 12px; padding-left: 2px">当前章节:<a href='100165772.htm'><font color='red'>30.3.2 读写二进制文件</font></a></h1>
<div id="divRelateNode" style="padding-left: 2px">
<div style='float:left;width:49%'>·<a href='100165769.htm'>30.2 移动、复制和删除文件</a></div><div style='float:right;width:49%'>·<a href='100165770.htm'>30.3 读写文件</a></div><div style='float:left;width:49%'>·<a href='100165771.htm'>30.3.1 流</a></div><div style='float:right;width:49%'>·<a href='100165773.htm'>30.3.3 读写文本文件</a></div><div style='float:left;width:49%'>·<a href='100165774.htm'>30.4 读写注册表</a></div><div style='float:right;width:49%'>·<a href='100165775.htm'>30.4.1 注册表</a></div></div>
</div>
</div>
</div>
<!-- main -->
<div id="main">
<div id="text"> <link href="css.css" rel="stylesheet" type="text/css" /><h3 style='margin-top:8.15pt;margin-right:0cm;FTEL:8.15pt;margin-left:
0cm'><a FTEL="_Toc507815212"><span lang=EN-US>30.3.2 </span></a><span
style='font-family:黑体'>读写二进制文件</span></h3>
<p class=MsoNormal><span style='font-family:宋体'>读写二进制文件通常要使用</span><span
lang=EN-US>FileStream</span><span style='font-family:宋体'>类。</span></p>
<h4 style='FTEL:21.45pt'><a FTEL=FileStream1><span lang=EN-US>1.
FileStream</span></a><span style='font-family:黑体'>类</span></h4>
<p class=MsoNormal><span lang=EN-US>FileStream</span><span style='font-family:
宋体'>实例用于读写文件中的数据。要构造</span><span lang=EN-US>FileStream</span><span
style='font-family:宋体'>实例,需要以下</span><span lang=EN-US>4</span><span
style='font-family:宋体'>条信息:</span></p>
<p class=1 style='margin-left:37.55pt;FTEL:-16.1pt'><span lang=EN-US>●<span
style='font:7.0pt "Times New Roman"'> </span></span><span
style='font-family:宋体'>要访问的文件。</span></p>
<p class=1 style='margin-left:37.55pt;FTEL:-16.1pt'><span lang=EN-US>●<span
style='font:7.0pt "Times New Roman"'> </span></span><span
style='font-family:宋体'>表示如何打开文件的模式</span><span style='font-family:宋体'>。例如,创建一个新文件或打开一个现有的文件。如果打开一个现有的文件,写入操作是应改写文件原来的内容,还是添加到文件的末尾?</span></p>
<p class=1 style='margin-left:37.55pt;FTEL:-16.1pt'><span lang=EN-US>●<span
style='font:7.0pt "Times New Roman"'> </span></span><span
style='font-family:宋体'>表示如何访问文件的访问方式<span style='letter-spacing:-1.0pt'>——</span></span><span
style='letter-spacing:-1.0pt'> </span><span style='font-family:宋体'>是只读、只写,还是读写?</span></p>
<p class=1 style='margin-left:37.55pt;FTEL:-16.1pt'><span lang=EN-US>●<span
style='font:7.0pt "Times New Roman"'> </span></span><span
style='font-family:宋体'>共享访问<span style='letter-spacing:-1.0pt'>——</span></span><span
style='letter-spacing:-1.0pt'> </span><span style='font-family:宋体'>换言之,是独占访问文件,还是允许其他流同时访问文件?如果允许其他流同时访问文件,则这些流是只读、只写,还是读写文件?</span></p>
<p class=MsoNormal><span style='font-family:宋体'>第一条信息通常用一个包含文件完整路径名的字符串来表示,本章只考虑需要该字符串的构造函数。除了这些构造函数外,其他的构造函数用老式的</span><span
lang=EN-US>Windows-API</span><span style='font-family:宋体'>文件句柄来处理文件。其余</span><span
lang=EN-US>3</span><span style='font-family:宋体'>条信息分别由</span><span lang=EN-US>3</span><span
style='font-family:宋体'>个</span><span lang=EN-US>.NET</span><span
style='font-family:宋体'>枚举</span><span
lang=EN-US>FileMode</span><span style='font-family:宋体'>、</span><span lang=EN-US>FileAccess</span><span style='font-family:宋体'>和</span> <span lang=EN-US>FileShare</span><span style='font-family:宋体'>来表示,这些枚举的值应是自我解释性的,如表</span><span
lang=EN-US>30-3</span><span style='font-family:宋体'>所示。</span></p>
<p class=a5 style='margin-top:8.15pt'><a FTEL=FileMode></a><a FTEL=FileShare></a><a
FTEL=FileAccess><span style='font-family:黑体'>表</span><span lang=EN-US>
30-3</span></a></p>
<div align=center>
<table class=MsoNormalTable border=1 cellspacing=0 cellpadding=0 width=582
style='width:436.7pt;margin-left:5.55pt;border-collapse:collapse;border:none'>
<tr>
<td width=121 valign=top style='width:90.8pt;border:solid windowtext 1.0pt;
border-left:none;padding:0cm 9.9pt 0cm 9.9pt'>
<p class=a2><span style='font-family:黑体'>枚</span><span lang=EN-US>
</span><span style='font-family:黑体'>举</span></p>
</td>
<td width=461 valign=top style='width:345.9pt;border-top:solid windowtext 1.0pt;
border-left:none;border-bottom:solid windowtext 1.0pt;border-right:none;
padding:0cm 9.9pt 0cm 9.9pt'>
<p class=a2><span style='font-family:黑体'>值</span></p>
</td>
</tr>
<tr>
<td width=121 valign=top style='width:90.8pt;border-top:none;border-left:
none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
padding:0cm 9.9pt 0cm 9.9pt'>
<p class=a4 style='margin-left:10.7pt'><span lang=EN-US>FileMode</span></p>
</td>
<td width=461 valign=top style='width:345.9pt;border:none;border-bottom:solid windowtext 1.0pt;
padding:0cm 9.9pt 0cm 9.9pt'>
<p class=a4 style='margin-left:10.7pt'><span lang=EN-US>Append</span><span
style='font-family:宋体'>、</span><span lang=EN-US>Create</span><span
style='font-family:宋体'>、</span><span lang=EN-US>CreateNew</span><span
style='font-family:宋体'>、</span><span lang=EN-US>Open</span><span
style='font-family:宋体'>、</span><span lang=EN-US>OpenOrCreate</span><span
style='font-family:宋体'>和</span><span lang=EN-US>Truncate</span></p>
</td>
</tr>
<tr>
<td width=121 valign=top style='width:90.8pt;border-top:none;border-left:
none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
padding:0cm 9.9pt 0cm 9.9pt'>
<p class=a4 style='margin-left:10.7pt'><span lang=EN-US>FileAccess</span></p>
</td>
<td width=461 valign=top style='width:345.9pt;border:none;border-bottom:solid windowtext 1.0pt;
padding:0cm 9.9pt 0cm 9.9pt'>
<p class=a4 style='margin-left:10.7pt'><span lang=EN-US>Read</span><span
style='font-family:宋体'>、</span><span lang=EN-US>ReadWrite</span><span
style='font-family:宋体'>和</span><span lang=EN-US>Write</span></p>
</td>
</tr>
<tr>
<td width=121 valign=top style='width:90.8pt;border-top:none;border-left:
none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;
padding:0cm 9.9pt 0cm 9.9pt'>
<p class=a4 style='margin-left:10.7pt'><span lang=EN-US>FileShare</span></p>
</td>
<td width=461 valign=top style='width:345.9pt;border:none;border-bottom:solid windowtext 1.0pt;
padding:0cm 9.9pt 0cm 9.9pt'>
<p class=a4 style='margin-left:10.7pt'><span lang=EN-US>Inheritable</span><span
style='font-family:宋体'>、</span><span lang=EN-US>None</span><span
style='font-family:宋体'>、</span><span lang=EN-US>Read</span><span
style='font-family:宋体'>、</span><span lang=EN-US>ReadWrite</span><span
style='font-family:宋体'>和</span><span lang=EN-US>Write</span></p>
</td>
</tr>
</table>
</div>
<p class=MsoNormal><span style='font-family:宋体'>注意,对于</span><span lang=EN-US>FileMode</span><span
style='font-family:宋体'>,如果要求的模式与文件的现有状态不一致,就会抛出一个异常。如果文件已经不存在,</span><span
lang=EN-US>Append</span><span style='font-family:宋体'>、</span><span lang=EN-US>Open</span><span
style='font-family:宋体'>和</span><span lang=EN-US>Truncate</span><span
style='font-family:宋体'>会抛出一个异常,如果文件存在,</span><span lang=EN-US>CreateNew</span><span
style='font-family:宋体'>会抛出一个异常。</span><span lang=EN-US>Create</span><span
style='font-family:宋体'>和</span><span lang=EN-US>OpenOrCreate</span><span
style='font-family:宋体'>可以处理这两种情况,但</span><span lang=EN-US>Create</span><span
style='font-family:宋体'>会删除现有的文件,创建一个新的空文件。</span><span lang=EN-US>FileAccess </span><span
style='font-family:宋体'>和</span><span lang=EN-US>FileShare</span><span
style='font-family:宋体'>枚举是按位标志,所以这些值可以与</span><span lang=EN-US>C#</span><span
style='font-family:宋体'>的按位</span><span lang=EN-US>OR</span><span
style='font-family:宋体'>运算符</span><span lang=EN-US>|</span><span
style='font-family:宋体'>合并使用。</span></p>
<p class=MsoNormal><span lang=EN-US>FileStream</span><span style='font-family:
宋体'>有许多构造函数,其中</span><span lang=EN-US>3</span><span style='font-family:宋体'>个最简单的构造函数如下所示。</span><a
FTEL=FileStreamconstructors></a></p>
<p class=2 style='margin-top:8.15pt;margin-right:0cm;FTEL:0cm;
margin-left:21.45pt;FTEL:.0001pt;FTEL:18.45pt'><span
lang=EN-US> // creates file with read-write access and allows other
streams read access</span></p>
<p class=2 style='margin-left:21.45pt;FTEL:18.45pt'><span lang=EN-US>
FileStream fs = new FileStream(@"C:\C# Projects\Project.doc", </span></p>
<p class=2 style='margin-left:21.45pt;FTEL:18.45pt'><span lang=EN-US>
FileMode.Create);</span></p>
<p class=2 style='margin-left:21.45pt;FTEL:18.45pt'><span lang=EN-US> </span></p>
<p class=2 style='margin-left:21.45pt;FTEL:18.45pt'><span lang=EN-US>
// as above, but we only get write access to the file </span></p>
<p class=2 style='margin-left:21.45pt;FTEL:18.45pt'><span lang=EN-US>
FileStream fs2 = new FileStream(@"C:\C# Projects\Project2.doc", </span></p>
<p class=2 style='margin-left:21.45pt;FTEL:18.45pt'><span lang=EN-US>
FileMode.Create, FileAccess.Write);</span></p>
<p class=2 style='margin-left:21.45pt;FTEL:18.45pt'><span lang=EN-US> </span></p>
<p class=2 style='margin-left:21.45pt;FTEL:18.45pt'><span lang=EN-US>
// as above but other streams don't get any access to the file while</span></p>
<p class=2 style='margin-left:21.45pt;FTEL:18.45pt'><span lang=EN-US>
// fs3 is open </span></p>
<p class=2 style='margin-left:21.45pt;FTEL:18.45pt'><span lang=EN-US>
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?