问题描述
我现在做的一个程序,基本功能是这样的:Pc端的程序使用timer_click事件,每间隔几秒判断是否有文件存在从指定的文件夹中若有将文件读取并对其进行相应的操作(操作完成会移出文件)而这些文件是从硬件设备上转移过去的(利用硬件的通讯软件),如果在timer_click事件开启时,正巧有一个文件正通过硬件的通讯软件写入到指定的文件夹下,也就是说某一文件正在被写入我想加一个判断:如果文件在被写入时,就不进行操作。但是我不知道用什么办法能够判断,某一文件正在被写入。请教各位大侠!非常急!
解决方案
解决方案二:
做错误处理,以读写权限去打开该文件,如果能打开,说明该文件目前没有被改动的可能.否则便是有可能被改动.
解决方案三:
filewatch
解决方案四:
读写权限去打开该文件,不是很明白,能举个例子么,非常感谢!
解决方案五:
捕获异常也可以吧
解决方案六:
try{sr=newStreamReader(filename,Encoding.Default);while((record=sr.ReadLine())!=null){line=changeFromOperate(record);dr=newDataRowOperate(dsFromBarcode,line);dsFromBarcode.Tables[0].Rows.Add(dr);}sr.Close();}catch(Exceptionex){System.Windows.Forms.MessageBox.Show(ex.Message.ToString());}捕获异常我试过,到sr=new...这一行就出现错误信息,就是不显示ex.Message.ToString());
解决方案七:
try{File.Open("路径",FileMode.Open,FileAccess.ReadWrite);//可以打开,表示目前无其他程序写该文件.}catch{//无法打开,如果文件存在,表示目前写权限已经其他程序锁定}
解决方案八:
同意用捕获异常
解决方案九:
为什么try了没用,就算报错他不会执行catch里的操作阿
解决方案十:
publicvoidRead(){if(!File.Exists(path)){//如果文件不存在,处理过程}else{try{//读取文件中的内容}catch(Exceptione){Thread.Sleep(10);Read();}}}
关于锁你可以参考一下http://blog.csdn.net/tjvictor/archive/2007/01/20/1488290.aspx建议使用Mutex在操作队列的地方进行加上互斥操作,比如这样:privatevoidthread1Func(){for(intcount=0;count<10;count++){lock(this){mutex.WaitOne();//读取操作mutex.ReleaseMutex();}}}privatevoidthread2Func(){for(intcount=0;count<10;count++){lock(this){mutex.WaitOne();//写入操作mutex.ReleaseMutex();}}}
解决方案十一:
用FileSystemWatcher
解决方案十二:
同意楼上的
解决方案十三:
的确FileSystemWatcher是一种解决这个问题的好办法学习了:)