好的,我搜索了一个答案但找不到它。
这是代码:
timestamp
让我直截了当,
TIA
答案 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.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;
}
}
答案 2 :(得分:1)
Read方法返回读入缓冲区参数的字节数。传入一个数组,当实际调用Read方法时,该数组将填充数据。您已经传入了想要读取的字节数。 阅读msdn文档以获取更多详细信息here
答案 3 :(得分:1)
3)已在这里得到解答。
至于4):Read
方法实际上也用字节填充缓冲区并返回它填充到缓冲区中的字节数。
将缓冲区和读取的字节数传递给Encoding. GetString()
会将文件中的字节解释为给定编码的字符代码,在您的情况下为ASCII,并根据编码从字节数组创建一个字符串。