C# 文件监听
目前在开发一个项目内容
1.有一台设备 照相功能
2.生成图片放入 电脑 如:D:\test中
使用fileSystemWatcher监听 当图片CREATE 的时候 拿取图片到数据库
程序出现一个问题
设备软件占用图片。而我的监听系统也要获得图片
就会报 错误 D:\TEST\**.Jpeg 文件被另一个通道占用。
这种事情应如何出来???
请各位指教
!!
------解决方案--------------------FileSystemWatcher是不会占用文件的。看看是不是其他的什么东西占用了。
------解决方案-------------------- 那就取消占用吧,或者双方已共享模式打开文件,不能写只能读
------解决方案--------------------先Sleep一秒或者更长,等照相软件写完数据再读取图片
------解决方案--------------------第一次正常 ,第二次被占用,说明你第一次使用后 没有释放它
------解决方案--------------------
我用过filesystemwatch,很好用,假设你要判断文件是否已经完全写入完毕,那你只能用ioexception,也就是尝试去读,如果用try catch发现io异常 让线程sleep1秒 继续去尝试,直到成功为止。当然 你如果 用了一些资源未释放那就。。。养成习惯。像filestream 等 都是要自己释放对象的
C# code
//当发现有文件创建时候,判断是否文件存在,以及文件是否已经完全写入完毕
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;
}
}