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));
让我把话说清楚,
- 我们声明一个文件流
- 我们声明一个字节数组。并将其CAPACITY设置为fs。
- ? ?为什么fs.Read()返回一个INTEGER ??
- ? ?这一行是如何将文本从.txt文件显示到控制台的?我们在getstring()方法中传入byte[],但byte[]不是空的吗?我们只把它的容量设为f。阅读发生在哪里,又是如何发生的?
TIA
如果你试图读取一个文本文件并在控制台显示它的所有行
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)的字符代码,并根据编码从字节数组创建字符串。