获取文件属性的替代方法

本文关键字:方法 取文件属性 | 更新日期: 2023-09-27 18:06:01

背景:

我有一个文件监控服务,它使用 FileSystemWatcher 类监视本地系统上文件的更改,我正在处理 CreatedDeletedRenamed 等事件。当这些事件被触发时,我只想使用 FileSystemInfo 类获取文件的属性,例如 FileNameFileSizeCreationTimeLastAccessTimeLastWriteTime

问题:

当此服务运行时,我无法卸载某些程序,例如(Microsoft安全要点(。我有一种感觉,这些服务挂在标记为删除的文件的资源上,因为只有这个服务正在运行,我只能卸载这些程序。

我的问题是我如何以ALTERNATIVE有效的方式GET THE PROPERTIES OF THE FILE(如上所述(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>";
}

真诚地德里克

获取文件属性的替代方法

使用 FileSystemInfo通常不会"挂起"这些文件。您必须首先弄清楚究竟是什么原因导致其他程序在卸载过程中卡住。使用进程监视器查看卸载期间正在访问的文件。该工具不言自明,您需要过滤文件系统活动。阅读此内容或谷歌搜索。

尝试通过

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

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

file.LastWriteTime = DateTime.Now

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

file.LastWriteTime /* = DateTime.Now */

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

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