问题描述
这文件分片后,怎么重组啊下面写法测试有问题啊文件变为0字节。求代码...大神帮忙下//保存一个分片到磁盘上file=Path.Combine(dir,name+"_"+index);data.SaveAs(file);//如果已经是最后一个分片,组合//当然你也可以用其它方法比如接收每个分片时直接写到最终文件的相应位置上,但要控制好并发防止文件锁冲突if(index==total){file=Path.Combine(dir,name);//byte[]bytes=null;using(FileStreamfs=newFileStream(file,FileMode.OpenOrCreate)){for(inti=1;i<=total;++i){stringpart=Path.Combine(dir,name+"_"+i);//bytes=System.IO.File.ReadAllBytes(part);//fs.Write(bytes,0,bytes.Length);//bytes=null;System.IO.File.Delete(part);fs.Close();}}}
解决方案
解决方案二:
文件读写操作都给注释掉了,怎么可能会有内容
解决方案三:
谢谢啊早上测试了全部代码不行。现在又可以了,见鬼。估计是不是文件锁的问题。请问下保存文件的路径和分片的路径分开比较好对吗还有如果文件只有10M有必要切吗感觉多此一举啊10M公司内网1秒就上去了。
解决方案四:
看错了,还是不行啊~~~~没有合在一起。
解决方案五:
上传10多的,以5M进行分片,然后就变成这样子了如图,合不起来,代码大神帮忙修改下。
解决方案六:
引用3楼wisdom1的回复:
看错了,还是不行啊~~~~没有合在一起。
fs.Close();从循环里移到using里
解决方案七:
分片后效果,怎么把它合起来,上面那个程序,合第一部分就停住了。
解决方案八:
file=Path.Combine(dir,name);byte[]bytes=null;using(FileStreamfs=newFileStream(file,FileMode.OpenOrCreate)){for(inti=1;i<=total;++i){stringpart=Path.Combine(dir,name+"_"+i);bytes=System.IO.File.ReadAllBytes(part);fs.Write(bytes,0,bytes.Length);bytes=null;System.IO.File.Delete(part);}fs.Close();}
信心满满哎以为可以,测试2回了,还是和图1一样的,组合第一部分后,估计就报错停住了。
解决方案九:
你write的每次都是当前的bytes会整合么?每次都从0开始……,要么把多个文件流都读到bytes,然后在write,要么就计算好每次wirte后的长度,下次write从上次write后的长度开始
解决方案十:
可以了去掉这个就可了bytes=null;原因不知道,代码本意是想清空字节
解决方案十一:
好吧,上面的理解错了,那个0是从bytes开始位置写入,但是我测试的bytes=null;没有影响啊,我用了两个txt测试的,可以把两个文件的文字合到一个里面去
解决方案十二:
引用10楼u010070496的回复:
好吧,上面的理解错了,那个0是从bytes开始位置写入,但是我测试的bytes=null;没有影响啊,我用了两个txt测试的,可以把两个文件的文字合到一个里面去
是啊bytes=null;不用去掉,但是感觉不稳定啊我本地测试,一时可以,一时又不可以。搞不明白啥子问题。有时候跟进去又可以,这句代码怎么理解:fs.Write(bytes,0,bytes.Length);。他怎么可以每次从0开始写入呢合并文件什么原理
解决方案十三:
一个非常奇怪的现象,我断定进去调试是正常分片,例如:分片3份,A_1,A_2,A_3.但是,如果不断点,他只分到A_1,A_3.,中间那份丢了。为什么断点就没问题呢我晕死了~~~难怪合拼的时候肯定报错了