日期:2014-05-17  浏览次数:20783 次

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里面才会出现内容不足的情况
------解决方案--------------------