C#读文件为什么结束不了啦,大家帮忙看看代码
String path = @"D://TDDOWNLOAD//Ju-on.2000.2in1.DVDRip-AVC.mkv";
//Open the stream and read it back.
FileStream fs = File.OpenRead(path);
FileStream fo = File.OpenWrite(@"E://Ju-on.2000.2in1.DVDRip-AVC.mkv");
byte[] b = new byte[1024 * 1024];
while (fs.Read(b,0,b.Length) >= 0)
{
fo.Write(b,0,b.Length);
fo.Flush();
}
fo.Close();
fs.Close();
这是按照帮助文档上写的读写文件,刻个文件一共2G,可是一直结束不了,会多出几个G出来。
byte写1024的话就没有问题,些1024 * 1024 就有问题了。
------解决方案--------------------肯定会一直写下去啊,你写1024个和1024*1024个能一样吗?
------解决方案--------------------不好意思看错了。。。
------解决方案--------------------你将if里面的改成大于0试一下,我记得好像读到末尾的时候就返回值为0.
但是你说1024的时候就好着。。。
------解决方案--------------------这里有两个错误,另一个错误你还不容易发现
1 fs.Read 如果遇到文件结束,会返回 0 ,但你并不退出循环,这就是问题
2 fo.Write 的长度你写错了,应该用 fs.Read 返回的长度,这样会导致文件比原来的长,多出来的部分内容是最后第二次读取的,导致文件长度变成数组长度的整数倍。
------解决方案--------------------我试了一下,你将等号去掉,就好了,虽然会出现你上面说的那个问题,但是多出来的大小不会大于你定义的一个byte的大小的,因为只有在最后读取的一个byte里面才会出现内容不足的情况
------解决方案--------------------