FileStream 文件流对象。是在内存中存在一个文件流,和 硬盘上的文件流是对应的。当关闭或者冲洗内存里的文件流的时候,它里面的内容会自动写入硬盘上的对应文件。
读的思路是:建立一个FileSteam对象以后,用它的Read方法,把文件流逐字节读到一个字节数组中。得到的字节数组,只是比特按字节的长度排放。每个字节到底是不是字符,还不一定,这要看你怎么看,用什么编码规则了。选定一个编码规则,将它转化成相应字符串。打印字符串就OK了。
这里要注意,因为我们用的字节数组大小是一定的,而文件有可能很大。因此要读多次。每次读满一数组的字节,就转换打印一次。我们设置一次读最大字节数,即字节数组的大小。只要读的字节数不是0,就一直读,直到没得读的,读取字节数为0为止。根据逻辑的意思,很显然用while()循环合适。FileSteam的对象的Read()方法,本来就是返回的成功读取的字节数。这样也好设置循环的判断条件,如果返回的值是0,则不读了。
using System;
using System.IO;
using System.Text;
namespace SimplyReadFile
{
class Program {
public static void Main(string[] args)
{
FileStream fs = new FileStream("c:/abc.txt",FileMode.Open);
int size;
size = 10;
byte[] bytes = new byte[size];
while( fs.Read(bytes,0,size) != 0 )
{
string s;
s = Encoding.UTF8.GetString(bytes);
Console.Write(s);
}
Console.ReadKey();
}
}
}
这里面其实还有一个问题的,如果最后一次没有读满,则最后一次读的字节和未能覆盖的倒数第二次的最后几个字节共同组成最后一次的字符串。打印出来的文本改变了原来文本的末尾部分。这个问题留待以后解决。