关于BinaryReader.Read()方法分批次读取二进制文件的问题(二进制文件特大,一次读不完)。
我用下面的方法,想将一个786MB的电影文件读到byte[]数组中。为什么执行后,程序一直处于运行状态,一直执行不到MessageBox.Show(b.Length.ToString());这一句。总是看不到最后读到byte[]数组中的大小。
难道BinaryReader.Read()只能读小的二进制文件,大的二进制文件读不了?
是不是把大的二进制文件读到byte[]数组中还有别的更好的方法?
FileStream fs = new FileStream(txb_File.Text, FileMode.Open, FileAccess.Read);
BinaryReader r = new BinaryReader(fs);
byte[] b = new byte[fs.Length];
for (int i = 0; i < fs.Length; i += 200000)
{
r.Read(b, 0, i);
}
MessageBox.Show(b.Length.ToString());
------解决方案--------------------FileStream fs = new FileStream(txb_File.Text, FileMode.Open, FileAccess.Read);
BinaryReader r = new BinaryReader(fs);
byte[] b = new byte[1024];
int l = 0;
int length = 0;
while(0 < (l = r.Read(b, 0, b.Length)))
{
length += l;
}
MessageBox.Show(length.ToString());
------解决方案--------------------楼主的机器还剩786MB的内存吗?
处理大文件一般都是分块(缓冲)来处理,比如4096字节为一组
------解决方案--------------------你要分块处理的,内存没有这么大的
------解决方案--------------------FileStream fs = new FileStream(txb_File.Text, FileMode.Open, FileAccess.Read);
BinaryReader r = new BinaryReader(fs);
byte[] b = new byte[1024];
MemoryStream ms = new MemoryStream();
int count =0
while(count <fs.Length)
{
int read= r.Read(b, 0, b.Length);
count+=read;
ms.Write(b,0,read);
}
r.Close();
fs.Close();
MessageBox.Show(ms.Length);
//ms.ToArray()就是读取的byte[]
------解决方案--------------------FileStream fs = new FileStream(txb_File.Text, FileMode.Open, FileAccess.Read);
System.IO.FileInfo info = new System.IO.FileInfo(txb_File.Text);
BinaryReader r = new BinaryReader(fs);
byte[] b = new byte[info.Length];
r.Read(b, 0, b.Length);
MessageBox.Show(b.Length.ToString());