C#初学者文件阅读

时间:2015-09-13 07:10:30

标签: c# io filestream

好的,我搜索了一个答案但找不到它。

这是代码:

timestamp

让我直截了当,

  1. 我们声明了一个文件流
  2. 我们声明一个字节数组..并将其CAPACITY设置为fs.Length
  3. ????为什么fs.Read()返回INTEGER ???
  4. ???该行如何显示.txt文件中的文本到控制台?我们传入了getstring()方法中的byte [],但是不是那个byte []为空?我们只将其容量设置为fs.length?阅读发生在哪里以及如何进行?
  5. TIA

4 个答案:

答案 0 :(得分:1)

如果您正在尝试阅读文本文件并在控制台中显示其所有行

foreach(string line in File.ReadAllLines("YourFilePath"))
{
    Console.WriteLine(line);
}

在你的方法中

FileStream fs = new FileStream("YourFilePath", FileMode.Open, FileAccess.Read);

打开文件以读取流fs。

byte[] fileText = new byte[fs.Length];

获取文件内容中的字节数,并创建该大小的字节数组

int bytesRead = fs.Read(fileText, 0, fileText.Length);

读取字节内容,从0到内容结尾(我们从上一个语句开始有长度),即完成内容到您创建的数组中。所以,现在你的字节数组fileText包含文件中的所有字节内容。

如果由于某种原因需要,它会返回此操作中读取的字节数。这可以是< =您想要读取的字节数(如果文件内容中可用的字节更少,则更少)。在您的情况下,它将与fileText.Length相同,因为您已经计算过。

System.Console.WriteLine(Encoding.ASCII.GetString(fileText, 0, bytesRead));

将字节数组转换为ASCII编码文本并写入控制台。

答案 1 :(得分:1)

FileStream.Read()返回实际读取的字节数。可能是你要求4096个字节,但得到0,或1或1000.这就是文档所说的:

  

返回值   键入:System.Int32   读入缓冲区的总字节数。如果该字节数当前不可用,则可能小于请求的字节数,如果到达流末尾则为零。

如果您正在阅读文字,可以使用其中一种有用的File方法:File.ReadAllTextFile.ReadAllLines,File.OpenText,它会为您提供StreamReader个对象你可以逐行阅读。

如果你需要读取字节(这是一个低得多的用法,实际上你应该可以使用StreamReader),那么你不想创建一个缓冲区的长度流,因为这可能会使您的程序崩溃OutOfMemoryException。相反,将缓冲区设置为4096字节,然后在循环中调用FileStream.Read,直到它返回0.但是,请注意,您不是在这里读取文本行,并且换行符可能位于缓冲。这是一个例子:

using (var fileStream = File.OpenRead("c:\\file.txt"))
{
    var buffer = new Byte[4096];
    var offset = 0;
    var read = 0;
    while ((read = fileStream.Read(buffer, offset, buffer.Length)) > 0)
    {
        var s = Encoding.ASCII.GetString(buffer, 0, read);
        Console.Write(s);
        offset += read;
    }
}

答案 2 :(得分:1)

Read方法返回读入缓冲区参数的字节数。传入一个数组,当实际调用Read方法时,该数组将填充数据。您已经传入了想要读取的字节数。 阅读msdn文档以获取更多详细信息here

答案 3 :(得分:1)

3)已在这里得到解答。

至于4):Read方法实际上也用字节填充缓冲区并返回它填充到缓冲区中的字节数。

将缓冲区和读取的字节数传递给Encoding. GetString()会将文件中的字节解释为给定编码的字符代码,在您的情况下为ASCII,并根据编码从字节数组创建一个字符串。