获取文件属性的替代方法
本文关键字:方法 取文件属性 | 更新日期: 2023-09-27 18:06:01
背景:
我有一个文件监控服务,它使用 FileSystemWatcher
类监视本地系统上文件的更改,我正在处理 Created
、Deleted
、Renamed
等事件。当这些事件被触发时,我只想使用 FileSystemInfo
类获取文件的属性,例如 FileName
、FileSize
、CreationTime
、LastAccessTime
、LastWriteTime
。
问题:
当此服务运行时,我无法卸载某些程序,例如(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,并根据间隔进行一些快速数学运算,您可以确定文件是否在间隔时间内上次访问或修改。 如果是,那就做你必须做的事情。 只是一个想法...