如何找到没有。没有读取文本文件的字节数?

时间:2013-04-24 12:07:46

标签: c# string streamreader

我有c#代码读取文本文件并将其打印出来,如下所示:

StreamReader sr = new StreamReader(File.OpenRead(ofd.FileName));
byte[] buffer = new byte[100]; //is there a way to simply specify the length of this to be the number of bytes in the file?
sr.BaseStream.Read(buffer, 0, buffer.Length);

foreach (byte b in buffer)
{
      label1.Text += b.ToString("x") + " ";
}

无论如何我能知道我的文件有多少个字节?

我想事先知道byte[] buffer的长度,以便在Read函数中,我可以简单地传入buffer.length作为第三个参数。

4 个答案:

答案 0 :(得分:8)

System.IO.FileInfo fi = new System.IO.FileInfo("myfile.exe");
long size = fi.Length;

为了找到文件大小,系统必须从磁盘中读取。因此,上面的示例执行从磁盘读取的数据,但不读取文件内容。

答案 1 :(得分:6)

如果您要阅读二进制数据,目前尚不清楚为什么要使用StreamReader。只需使用FileStream代替。您可以使用Length属性来查找文件的长度。

但是,请注意,这并不意味着您应该只调用Read并假设单个调用将读取所有数据。你应该循环直到你读完所有内容:

byte[] data;
using (var stream = File.OpenRead(...))
{
    data = new byte[(int) stream.Length];
    int offset = 0;
    while (offset < data.Length)
    {
        int chunk = stream.Read(data, offset, data.Length - offset);
        if (chunk == 0)
        {
            // Or handle this some other way
            throw new IOException("File has shrunk while reading");
        }
        offset += chunk;
    }
}

请注意,这是假设您想要来读取数据。如果您不想打开流,请使用FileInfo.Length,因为其他答案已显示。请注意,FileStream.LengthFileInfo.Length的类型都为long,而数组的长度限制为32位。对于大于2演出的文件,你想要发生什么?

答案 2 :(得分:0)

您可以使用FileInfo.Length方法。 看一下链接中给出的例子。

答案 3 :(得分:0)

我想这里的东西应该有所帮助。

我怀疑你可以在没有阅读的情况下预先猜测文件的大小......

How do I use File.ReadAllBytes In chunks

如果是大文件;然后阅读块可能会有所帮助