c# filesystemwatcher 监控文件是否写完

renliang461 2010-06-27 01:47:29
程序是这样的,它通过filesystemwatcher监控一个A文件夹的.jpg 文件,如果有新文件则传到服务器的B文件夹。

测试的时候把比较大的文件拷贝到A文件夹时会发生错误,因为该文件正被其他进程占用。我使用一个队列去保存这些大文件,即如果大文件进入A文件夹,则程序会发生异常,在catch块把这些发生异常的图片路径放到队列里,使用timer去定时上传这些文件。



现在发现一个新问题,A文件主要用来存放采集卡采集回来的图片,这些图片是先建立个空的jpg 文件,然后不断写入流。并且这些文件在复制时不会出现正在被其他文件占用的错误。所以在filesystemwatcher监控的时候经常把0KB的空文件上传到服务器。我已经把监控的类型设置为监控文件名或最后一次打开文件时间或属性改变或大小改变等,所有的监控类型都搭配试过了,但是还是不能解决上传0KB文件的问题。

谁能给个解决办法,感激不尽!

...全文
692 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
txdxun 2010-06-28
  • 打赏
  • 举报
回复
mark一下,我也是遇到过这样的问题,后来就妥协了
用定时器定时处理,同时记录最后成功处理的文件名称,按时间排序,每次都从该文件后开始处理。
最好处理完毕后删除源文件
  • 打赏
  • 举报
回复
2楼的思路似乎简单易行
renliang461 2010-06-28
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 molonvely 的回复:]
两个思路
A
Window event hook, 监控Close handle

B
复制文件之前用可写方式CreateFile,看是否报错。
[/Quote]

可否详细点呢?
捷哥1999 2010-06-27
  • 打赏
  • 举报
回复
给个思路!
你可以在获知新出现一个文件后,监控这个文件的大小变化,如果有变化,则不要复制到服务器,如果两次检查大小不变,则发送给服务器。
molonvely 2010-06-27
  • 打赏
  • 举报
回复
两个思路
A
Window event hook, 监控Close handle

B
复制文件之前用可写方式CreateFile,看是否报错。

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧