问题描述
本人用的FileSystemWatcher,但是文件创建的时候读取只能读取到一部分,貌似文件还没有创建完成就读取了,请教各位大神有解决方法吗?谢谢!高分悬赏
解决方案
解决方案二:
绑定元以下!
解决方案三:
延迟一定的时间后再读取
解决方案四:
///<summary>///当文件夹内监控内容发生变化时///</summary>///<paramname="sender"></param>///<paramname="e"></param>privatevoidfsw_Changed(objectsender,FileSystemEventArgse){Thread.Sleep(3000);//readstream}
解决方案五:
看msdn吧,它写得很明白应该如何正确地编程设计。没有事件捕获“文件修改之后关闭”的,你需要自己编程处理。
解决方案六:
延时的方法貌似不行,因为我监控的文件夹里面的图片是通过网络传输的,有的图片大的可能要传很久,也有可能网络原因导致传输时间变长的,难道就没有解决方法吗?
解决方案七:
延迟搞不定,那就进队列呗,然后线程读队列,成功就移除队列,失败就wait
解决方案八:
不可能没有解决方法的事儿,只不过你应该在你处理“传输”的模块去处理,而不是在这里去“监控”。
解决方案九:
如果你一定要捕获这类事件,没有“文件关闭事件”,应也该在抛出changed事件时去处理,而不是在created事件时去处理。
解决方案十:
在msdn中有较清楚的描述,我估计你没有认真看。虽然我不记得原文,但是我肯定它写到了“changed事件会触发很多次”,这正是你需要自己编程判断,你需要在changed中判断事件参数、看看到底是哪一种改变。
解决方案十一:
关键问题是你这个解决方案的问题首先你的图片是怎么创建的,如果是本机从网上下载,那么可以读取方法放到下载文件完成后执行,如果是客户端上传的这个就有点麻烦,因为我不对这方面不是很熟悉所以你应该从其它方面去解决。
解决方案十二:
是不是可以检测文件的完整性,如果文件没有传完文件是不完整的。
解决方案十三:
changed事件会触发很多次
解决方案十四:
读取时设一循环,直到读到的数据长度和文件尺寸一致
解决方案十五:
我个人想到一个方法,就是文件如果还在传输中,说明文件正在使用中,这时候filestream会抛出异常,就是文件正在使用,我决定多线程,每个线程处理一个文件,并使用一个递归函数,如果文件还在使用中说明文件还在传输,还没有传输完毕,这时候就递归,直到这个文件不再被使用,这时候就可以读取stream并传递给外层去使用,现在正在试验,如果不成功的话我再来问,感谢各位大神!!!
解决方案:
貌似还是不行额,这种方法导致了部分文件只传输了一部分,没有传完,难道递归函数导致的吗?按理说文件在传输中的话属于lock状态吧?正在使用为什么我这边做操作会导致文件只传输了一部分呢?