c#初级文件读取

本文关键字:读取 文件 | 更新日期: 2023-09-27 18:12:34

我搜索了这个问题的答案,但是没有找到。

代码如下:

     FileStream fs = new FileStream(fileName, FileMode.Open, FileAccess.Read);
        byte[] fileText = new byte[fs.Length];
        int bytesRead = fs.Read(fileText, 0, fileText.Length);
        Console.WriteLine(Encoding.ASCII.GetString(fileText, 0, bytesRead));

让我把话说清楚,

  1. 我们声明一个文件流
  2. 我们声明一个字节数组。并将其CAPACITY设置为fs。
  3. ? ?为什么fs.Read()返回一个INTEGER ??
  4. ? ?这一行是如何将文本从.txt文件显示到控制台的?我们在getstring()方法中传入byte[],但byte[]不是空的吗?我们只把它的容量设为f。阅读发生在哪里,又是如何发生的?

TIA

c#初级文件读取

如果你试图读取一个文本文件并在控制台显示它的所有行

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相同。长度,因为你已经计算过了。

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

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

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

FileStream.Read()返回实际读取的字节数。它可能是您请求4096字节,但得到0、1或1000。文档是这样说的:

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

如果你正在阅读文本,你可以使用一个有用的File方法:File.ReadAllText, File.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;
    }
}

3)在这里已经有了答案。

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

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