我有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
作为第三个参数。
答案 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.Length
和FileInfo.Length
的类型都为long
,而数组的长度限制为32位。对于大于2演出的文件,你想要发生什么?
答案 2 :(得分:0)
您可以使用FileInfo.Length方法。 看一下链接中给出的例子。
答案 3 :(得分:0)
我想这里的东西应该有所帮助。
我怀疑你可以在没有阅读的情况下预先猜测文件的大小......
How do I use File.ReadAllBytes In chunks
如果是大文件;然后阅读块可能会有所帮助