目前在开发一个项目内容
1.有一台设备 照相功能 
2.生成图片放入 电脑 如:D:\test中使用fileSystemWatcher监听  当图片CREATE 的时候  拿取图片到数据库
程序出现一个问题设备软件占用图片。而我的监听系统也要获得图片  
就会报 错误  D:\TEST\**.Jpeg 文件被另一个通道占用。这种事情应如何出来???
请各位指教!!

解决方案 »

  1.   

    FileSystemWatcher是不会占用文件的。看看是不是其他的什么东西占用了。
      

  2.   

    先Sleep一秒或者更长,等照相软件写完数据再读取图片
      

  3.   

    当发现CREATE文件  我用 文件流  和  stream流 去读取 这个文件报错 在 filestream(string path,fileMode mode,fileaccess access)
    这个地方程序运行后 第一次创建时 能正常 获取  第二次就报这个错误了。。我断点调试 的时候。一点问题都没有。
      

  4.   

    我用过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的缓存满了就溢出了。你的监控文件也就丢失部分
      

  5.   


    问下 有没有 filesystemwatch  多线程的案例  谢谢