首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

C# 资料监听

2012-06-21 
C# 文件监听目前在开发一个项目内容1.有一台设备 照相功能2.生成图片放入 电脑 如:D:\test中使用fileSyste

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;            }        } 

热点排行