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

时间:2011-08-18 01:47:23

标签: c# filesystemwatcher

背景:

我有一个文件监控服务,它使用FileSystemWatcher类监视本地系统上文件的更改,我正在处理CreatedDeleted,{{1}等事件}}。当触发这些事件时,我只想使用RenamedFileNameFileSizeCreationTimeLastAccessTime来获取文件的属性,例如LastWriteTimeFileSystemInfoGET THE PROPERTIES OF THE FILEALTERNATIVEwithout hanging on to the resources of the file FileSystemInfo上课。

问题:

虽然此服务正在运行,但我无法卸载某些程序(例如Microsoft Security Essentials)。我觉得这些服务正挂在标记为删除的文件的资源上​​,因为如果只运行此服务,我只能卸载这些程序。

我的问题是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>"; } &amp; {我是如何{{1}}(如上所述)有效的方式{{1}}?

以下是使用{{1}}

的代码
{{1}}

此致 德里克

2 个答案:

答案 0 :(得分:2)

使用FileSystemInfo通常不会“挂起”这些文件。您必须首先弄清楚在卸载过程中导致其他程序卡住的确切原因。使用ProcessMonitor查看卸载期间正在访问的文件。该工具非常自我解释,您需要过滤文件系统活动。阅读this或谷歌浏览。

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

更新:看起来这是违规行:

file.LastWriteTime = DateTime.Now

尝试评论此分配,看看它是否解决了问题:

file.LastWriteTime /* = DateTime.Now */

这是一个错字还是你真的需要写LastWriteTime?

答案 1 :(得分:0)

您可以做的是对LastAccessTime和LastWriteTime进行每次间隔检查,并根据间隔进行一些快速数学运算,您可以确定文件是否是在间隔时间内上次访问或修改的。如果是的话,做你需要做的事。只是一个想法...