C# 文件监听

Nakupenda123 2012-06-19 07:57:47
目前在开发一个项目内容
1.有一台设备 照相功能
2.生成图片放入 电脑 如:D:\test中

使用fileSystemWatcher监听 当图片CREATE 的时候 拿取图片到数据库
程序出现一个问题

设备软件占用图片。而我的监听系统也要获得图片
就会报 错误 D:\TEST\**.Jpeg 文件被另一个通道占用。

这种事情应如何出来???
请各位指教

!!
...全文
293 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
sd1232123 2012-06-20
  • 打赏
  • 举报
回复
我用过filesystemwatch,很好用,假设你要判断文件是否已经完全写入完毕,那你只能用ioexception,也就是尝试去读,如果用try catch发现io异常 让线程sleep1秒 继续去尝试,直到成功为止。当然 你如果 用了一些资源未释放那就。。。养成习惯。像filestream 等 都是要自己释放对象的
  //当发现有文件创建时候,判断是否文件存在,以及文件是否已经完全写入完毕
private static void BeforeDoWork(string path)
{
FileInfo fi = new FileInfo(path);
string msg = string.Empty;
//判断文件是否存在(因为可能是文件夹或者别的什么异常)
if (!fi.Exists)
{
msg += path + " 文件不存在或者不是文件"+DateTime.Now;
lock (_locker)
{
writeInLog(msg);
}
SendMessage(msg);
return;
}
//这里采用IO冲突的方式去判断是否写入完毕
Again: try
{
fi.OpenRead();
}
catch (IOException ex)
{
Thread.Sleep(500);
goto Again;
}
}

你如果监控文件量大的话,建议使用多线程,或者利用c#里的线程池,及时响应,不然filesystemwatch的缓存满了就溢出了。你的监控文件也就丢失部分
叫我三三 2012-06-20
  • 打赏
  • 举报
回复
第一次正常 ,第二次被占用,说明你第一次使用后 没有释放它
Nakupenda123 2012-06-20
  • 打赏
  • 举报
回复
当发现CREATE文件 我用 文件流 和 stream流 去读取 这个文件

报错 在 filestream(string path,fileMode mode,fileaccess access)
这个地方

程序运行后 第一次创建时 能正常 获取 第二次就报这个错误了。。

我断点调试 的时候。一点问题都没有。
Nakupenda123 2012-06-20
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]

我用过filesystemwatch,很好用,假设你要判断文件是否已经完全写入完毕,那你只能用ioexception,也就是尝试去读,如果用try catch发现io异常 让线程sleep1秒 继续去尝试,直到成功为止。当然 你如果 用了一些资源未释放那就。。。养成习惯。像filestream 等 都是要自己释放对象的C# code
//当发现有文件创建时候,判断是否文件存在,以及文件是……
[/Quote]

问下 有没有 filesystemwatch 多线程的案例 谢谢
Nakupenda123 2012-06-20
  • 打赏
  • 举报
回复
谢谢。。我去44看
iyomumx 2012-06-19
  • 打赏
  • 举报
回复
先Sleep一秒或者更长,等照相软件写完数据再读取图片
bdmh 2012-06-19
  • 打赏
  • 举报
回复
那就取消占用吧,或者双方已共享模式打开文件,不能写只能读
ParanoidKing 2012-06-19
  • 打赏
  • 举报
回复
FileSystemWatcher是不会占用文件的。看看是不是其他的什么东西占用了。

110,502

社区成员

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

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

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