100165773.htm

来自「C#高级编程(第三版),顶死你们。。 。up」· HTM 代码 · 共 643 行 · 第 1/3 页

HTM
643
字号
margin-left:21.45pt;FTEL:18.45pt'><span lang=EN-US>&nbsp;&nbsp;
StreamReader sr = myFile.OpenText();</span></p>

<p class=MsoNormal><span style='font-family:宋体'>与</span><span lang=EN-US>FileStream</span><span
style='font-family:宋体'>一样,应在使用后关闭</span><span lang=EN-US>StreamReader</span><span
style='font-family:宋体'>。如果没有这样做,就会致使文件一直锁定,因此不能执行其他过程</span><span lang=EN-US>(</span><span
style='font-family:宋体'>除非使用</span><span lang=EN-US>FileStream</span><span
style='font-family:宋体'>构造</span><span lang=EN-US>StreamReader</span><span
style='font-family:宋体'>和特定的</span><span lang=EN-US>FileShare. ShareReadWrite)</span><span
style='font-family:宋体'>:</span></p>

<p class=2 style='margin-top:8.15pt;margin-right:0cm;FTEL:8.15pt;
margin-left:21.45pt;FTEL:18.45pt'><span lang=EN-US>&nbsp;&nbsp;
sr.Close();</span></p>

<p class=MsoNormal><span style='font-family:宋体'>介绍完实例化</span><span lang=EN-US>StreamReader</span><span
style='font-family:宋体'>后,就可以用该实例作一些工作了。与</span><span lang=EN-US>FileStream</span><span
style='font-family:宋体'>一样,我们仅指出可以用于读取数据的许多方式,您应在</span><span lang=EN-US>SDK</span><span
style='font-family:宋体'>文档说明书中查阅其他不太常用的</span><span lang=EN-US>StreamReader</span><span
style='font-family:宋体'>方法。</span></p>

<p class=MsoNormal><span style='font-family:宋体'>所使用的最简单的方式是</span><span
lang=EN-US>ReadLine()</span><span style='font-family:宋体'>,该方法一次读取一行,但返回的字符串中不包括标记该行结束的回车换行符:</span></p>

<p class=2 style='margin-top:8.15pt;margin-right:0cm;FTEL:8.15pt;
margin-left:21.45pt;FTEL:18.45pt'><span lang=EN-US>&nbsp;&nbsp; string
nextLine = sr.ReadLine();</span></p>

<p class=MsoNormal><span style='font-family:宋体'>另外,还可以在一个字符串中提取文件的所有剩余内容</span><span
lang=EN-US>(</span><span style='font-family:宋体'>严格地说,是流的全部剩余内容</span><span
lang=EN-US>)</span><span style='font-family:宋体'>:</span></p>

<p class=2 style='margin-top:8.15pt;margin-right:0cm;FTEL:8.15pt;
margin-left:21.45pt;FTEL:18.45pt'><span lang=EN-US>&nbsp;&nbsp; string
restOfStream = sr.ReadToEnd();</span></p>

<p class=MsoNormal><span style='font-family:宋体'>可以只读取一个字符:</span></p>

<p class=2 style='margin-top:8.15pt;margin-right:0cm;FTEL:8.15pt;
margin-left:21.45pt;FTEL:18.45pt'><span lang=EN-US>&nbsp;&nbsp; int nextChar
= sr.Read();</span></p>

<p class=MsoNormal><span
lang=EN-US>Read()</span><span style='font-family:宋体'>的重载方法可以把返回的字符转换为一个整数,如果到达流的尾端,就返回</span><span
lang=EN-US>-1</span><span style='font-family:宋体'>。</span></p>

<p class=MsoNormal><a FTEL=Read2><span style='font-family:宋体'>最后,可以用一个偏移值,把给定个数的字符读到数组中:</span></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>&nbsp;&nbsp; // to read 100 characters in.</span></p>

<p class=2 style='margin-left:21.45pt;FTEL:18.45pt'><span lang=EN-US>&nbsp;</span></p>

<p class=2 style='margin-left:21.45pt;FTEL:18.45pt'><span lang=EN-US>&nbsp;&nbsp;
int nChars = 100;</span></p>

<p class=2 style='margin-left:21.45pt;FTEL:18.45pt'><span lang=EN-US>&nbsp;&nbsp;
char [] charArray = new char[nChars]; </span></p>

<p class=2 style='margin-top:0cm;margin-right:0cm;FTEL:8.15pt;
margin-left:21.45pt;FTEL:18.45pt'><span lang=EN-US>&nbsp;&nbsp; int
nCharsRead = sr.Read(charArray, 0, nChars);</span></p>

<p class=MsoNormal><span style='font-family:宋体'>如果要求读取的字符数多于文件中剩余的字符数,</span><span
lang=EN-US>nCharsRead</span><span style='font-family:宋体'>应小于</span><span
lang=EN-US>nChars </span><span style='font-family:宋体'>。</span></p>

<h4 style='FTEL:21.45pt'><span lang=EN-US>2. StreamWriter</span><span
style='font-family:黑体'>类</span></h4>

<p class=MsoNormal><a FTEL=StreamWriter2><span lang=EN-US>StreamWriter</span></a><span
style='font-family:宋体'>类的工作方式与</span><span lang=EN-US>StreamReader</span><span
style='font-family:宋体'>的类似,但</span><span lang=EN-US>StreamWriter</span><span
style='font-family:宋体'>只能用于写入文件</span><span lang=EN-US>(</span><span
style='font-family:宋体'>或另一个流</span><span lang=EN-US>)</span><span
style='font-family:宋体'>。构造</span><span lang=EN-US>StreamWriter</span><span
style='font-family:宋体'>的方法包括:</span></p>

<p class=2 style='margin-top:8.15pt;margin-right:0cm;FTEL:8.15pt;
margin-left:21.45pt;FTEL:18.45pt'><span lang=EN-US>&nbsp;&nbsp;
StreamWriter sw = new StreamWriter(@&quot;C:\My Documents\ReadMe.txt&quot;);</span></p>

<p class=MsoNormal><span style='font-family:宋体'>上面的代码使用了</span><span
lang=EN-US>UTF8</span><span style='font-family:宋体'>编码方法,</span><span
lang=EN-US>.NET</span><span style='font-family:宋体'>把这种编码方法设置为默认的编码方法。如果要指定其他的编码方法:</span></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>&nbsp;&nbsp; StreamWriter sw = new StreamWriter(@&quot;C:\My
Documents\ReadMe.txt&quot;, true,</span></p>

<p class=2 style='margin-top:0cm;margin-right:0cm;FTEL:8.15pt;
margin-left:21.45pt;FTEL:18.45pt'><span lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
Encoding.ASCII);</span></p>

<p class=MsoNormal><span style='font-family:宋体'>在这个构造函数中,第二个参数是</span><span
lang=EN-US>Boolean</span><span style='font-family:宋体'>型,表示文件是否应以追加方式打开。构造函数的参数不能仅是一个文件名和一个编码类。</span></p>

<p class=MsoNormal><span style='font-family:宋体'>当然,可以把</span><span lang=EN-US>StreamWriter</span><span
style='font-family:宋体'>关联到一个文件流上,以获得打开文件的更多控制选项:</span></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>&nbsp;&nbsp; FileStream fs = new FileStream(@&quot;C:\My
Documents\ReadMe.txt&quot;, </span></p>

<p class=2 style='margin-left:21.45pt;FTEL:18.45pt'><span lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
FileMode.CreateNew, FileAccess.Write, FileShare.Read);</span></p>

<p class=2 style='margin-top:0cm;margin-right:0cm;FTEL:8.15pt;
margin-left:21.45pt;FTEL:18.45pt'><span lang=EN-US>&nbsp;&nbsp;
StreamWriter sw = new StreamWriter(fs); </span></p>

<p class=MsoNormal><span lang=EN-US>FileInfo</span><span style='font-family:
宋体'>不执行返回</span><span lang=EN-US>StreamWriter</span><span style='font-family:
宋体'>的任何方法。</span> </p>

<p class=MsoNormal><span style='font-family:宋体'>另外,如果要创建一个新文件,并开始给它写入数据,可以使用下面的代码:</span></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>&nbsp;&nbsp; FileInfo myFile = new FileInfo(@&quot;C:\My
Documents\NewFile.txt&quot;);</span></p>

<p class=2 style='margin-top:0cm;margin-right:0cm;FTEL:8.15pt;
margin-left:21.45pt;FTEL:18.45pt'><span lang=EN-US>&nbsp;&nbsp;
StreamWriter sw = myFile.CreateText();</span></p>

<p class=MsoNormal><span style='font-family:宋体'>与其他流类一样,在使用完后,要关闭</span><span
lang=EN-US>StreamWriter</span><span style='font-family:宋体'>:</span></p>

<p class=2 style='margin-top:8.15pt;margin-right:0cm;FTEL:8.15pt;
margin-left:21.45pt;FTEL:18.45pt'><span lang=EN-US>&nbsp;&nbsp;
sw.Close();</span></p>

<p class=MsoNormal><span style='font-family:宋体'>写入流可以使用</span><span lang=EN-US>StreamWriter.Write()</span><span
style='font-family:宋体'>的</span><span lang=EN-US>4</span><span style='font-family:
宋体'>个重载方法来完成。最简单的方式是写入一个流,后面加上一个回车换行符:</span><a FTEL=Write2></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>&nbsp;&nbsp; string nextLine = &quot;Groovy Line&quot;;</span></p>

<p class=2 style='margin-top:0cm;margin-right:0cm;FTEL:8.15pt;
margin-left:21.45pt;FTEL:18.45pt'><span lang=EN-US>&nbsp;&nbsp;
sw.Write(nextLine);</span></p>

<p class=MsoNormal><span style='font-family:宋体'>也可以写入一个字符:</span></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>&nbsp;&nbsp; char nextChar = 'a';</span></p>

<p class=2 style='margin-top:0cm;margin-right:0cm;FTEL:8.15pt;
margin-left:21.45pt;FTEL:18.45pt'><span lang=EN-US>&nbsp;&nbsp;
sw.Write(nextChar);</span></p>

<p class=MsoNormal><span style='font-family:宋体'>也可以写入一个字符数组:</span></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>&nbsp;&nbsp; char [] charArray = new char[100];</span></p>

<p class=2 style='margin-left:21.45pt;FTEL:18.45pt'><span lang=EN-US>&nbsp;</span></p>

<p class=2 style='margin-left:21.45pt;FTEL:18.45pt'><span lang=EN-US>&nbsp;&nbsp;
// initialize these characters</span></p>

<p class=2 style='margin-left:21.45pt;FTEL:18.45pt'><span lang=EN-US>&nbsp;</span></p>

<p class=2 style='margin-top:0cm;margin-right:0cm;FTEL:8.15pt;
margin-left:21.45pt;FTEL:18.45pt'><span lang=EN-US>&nbsp;&nbsp;
sw.Write(charArray);</span></p>

<p class=MsoNormal><span style='font-family:宋体'>甚至可以写入字符数组的一部分:</span></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>&nbsp;&nbsp; int nCharsToWrite = 50;</span></p>

<p class=2 style='margin-left:21.45pt;FTEL:18.45pt'><span lang=EN-US>&nbsp;&nbsp;
int startAtLocation = 25;</span></p>

<p class=2 style='margin-left:21.45pt;FTEL:18.45pt'><span lang=EN-US>&nbsp;&nbsp;
char [] charArray = new char[100];</span></p>

<p class=2 style='margin-left:21.45pt;FTEL:18.45pt'><span lang=EN-US>&nbsp;</span></p>

<p class=2 style='margin-left:21.45pt;FTEL:18.45pt'><span lang=EN-US>&nbsp;&nbsp;
// initialize these characters</span></p>

<p class=2 style='margin-left:21.45pt;FTEL:18.45pt'><span lang=EN-US>&nbsp;</span></p>

<p class=2 style='margin-top:0cm;margin-right:0cm;FTEL:8.15pt;
margin-left:21.45pt;FTEL:18.45pt'><span lang=EN-US>&nbsp;&nbsp;
sw.Write(charArray, startAtLocation, nCharsToWrite);</span></p>

<h4 style='FTEL:21.45pt'><span lang=EN-US>3.</span><span lang=EN-US
style='font-family:宋体'> </span><span lang=EN-US>ReadWriteText</span><span
style='font-family:黑体'>示例</span></h4>

<p class=MsoNormal><a FTEL=ReadWriteText></a><span
lang=EN-US>ReadWriteText</span><span style='font-family:宋体'>示例说明了</span><span lang=EN-US>StreamReader</span><span style='font-family:宋体'>和</span><span
lang=EN-US>StreamWriter</span><span style='font-family:宋体'>类的用法。它非常类似于前面的</span><span
lang=EN-US>ReadBinaryFile</span><span style='font-family:宋体'>示例,但假定要读取的文件是一个文本文件,并显示其内容。它还可以保存文件</span><span
lang=EN-US>(</span><span style='font-family:宋体'>包括在文本框中对文本进行的修改</span><span
lang=EN-US>)</span><span style='font-family:宋体'>。它将以</span><span lang=EN-US>Unicode</span><span
style='font-family:宋体'>格式保存文件。</span></p>

<p class=MsoNormal><span style='font-family:宋体'>图</span><span lang=EN-US>30-9</span><span
style='font-family:宋体'>所示的</span><span lang=EN-US>ReadWriteText</span><span
style='font-family:宋体'>用于显示前面的</span><span lang=EN-US>NewFile.aspx</span><span
style='font-family:宋体'>文件。但这次读取内容会更容易一些。</span></p>

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?