2011-08-18 52 views
1

背景:替代方法获取文件的属性?

我有手表使用FileSystemWatcher类的本地系统中的文件更改的文件监控服务,我处理的事件,如CreatedDeletedRenamed。当触发这些事件时,我只想使用FileSystemInfo类来获取文件的属性,如FileName,FileSize,CreationTime,LastAccessTime,LastWriteTime

问题:

虽然这个服务正在运行,我无法卸载某些程序,例如(微软安全必备)。我有一种感觉,这些服务是挂在标记为删除的文件的资源,因为我只能卸载这些程序,如果只有这个服务正在运行。

我的问题是我该如何GET THE PROPERTIES OF THE FILE(如上所述)在ALTERNATIVE &有效的方式without hanging on to the resources of the file

下面是使用FileSystemInfo

public void OnCreate/OnRenamed(object source, FileSystemEventArgs e) 

{ FileInfo file = new FileInfo(e.FullPath); 

String output = "<Event><TimeStamp>" + currentTime + "</TimeStamp>"; 
      output += "<Name>" + action + "</Name>"; 
      output += "<Properties><FileName>" + file.Name + "</FileName>"; 
      output += "<FullPath>" + file.FullName + "</FullPath>"; 
      output += "<FileSize>" + file.Length + "</FileSize>"; 
      output += "<CreationTime>" + String.Format("{0:yyyyMMdd-HHmmss.fff}", file.CreationTime) + "</CreationTime>"; 
      output += "<LastAccess>" + String.Format("{0:yyyyMMdd-HHmmss.fff}", file.LastAccessTime) + "</LastAccess>"; 
      output += "<LastWriteTime>" + String.Format("{0:yyyyMMdd-HHmmss.fff}", file.LastWriteTime = DateTime.Now) + "</LastWriteTime></Properties></Event>"; 

} 

真诚, 德里克

+0

启动进程资源管理器,看看你_really_挂在文件上。没有点雁追。 – Mrchief

+0

请教我如何去检查它? – Derek

+0

请参阅[本](http://captaindbg.com/tutorial-and-advance-troubleshooting-using-process-explorer/)。向下滚动到“处理级别疑难解答” – Mrchief

回答

2

使用FileSystemInfo通常不会 '挂' 到这些文件我的代码。你必须首先弄清楚究竟是什么导致其他程序在卸载过程中卡住了。使用ProcessMonitor可查看卸载过程中正在访问的文件。该工具非常明显,您需要过滤文件系统活动。阅读this或谷歌左右。

尝试通过一次取出一件东西来进行试验。我假设这些程序在您的服务未运行时可以成功卸载。这证明这确实是您的服务导致的问题。首先评论你的FileSystemInfo代码。看看问题是否消失。然后注释掉FileSystemWatcher,看看它是否有帮助。

更新:看起来这是得罪行:

file.LastWriteTime = DateTime.Now 

试评这个assignement,看看它是否解决了这个问题:

file.LastWriteTime /* = DateTime.Now */ 

了这一个错字,或者你真的需要写LastWriteTime?

+0

请指导我如何去检查它? – Derek

+0

@ Derek:看到更新后的答案,ProcessMonitor在这种情况下将比ProcessExplorer做得更好。或者你可以简单地通过评论代码和检查是否有帮助来缩小原因。 – Dmitry

+0

嗯,在注释FileSystemInfo上的代码部分后,程序能够正常卸载,但我仍然无法弄清楚为什么FileSystemInfo代码部分(我只是在监视系统时获取文件的属性)是原因的问题? – Derek

0

你可以做的是对的LastAccessTime和LastWriteTime每间隔检查,并以此为基础进行的间隔一些快速的数学,你可以确定上次访问文件或间隔时间内进行修改。如果是这样,就做你必须做的事情。只是一个想法...

+0

亲爱的主席先生,也许你可以看看我的另一个问题http://stackoverflow.com/questions/7184472/fileinfo-exceptions – Derek