FileSystemInfo.Refresh
似乎需要文件的特定权限,即使我在文档中找不到任何相关内容。我怀疑它需要写访问才能正常工作。
有没有办法检查对该方法的调用是否失败?它没有抛出任何异常,即使它没有做任何事情。我可以检查文件的可用权限(并为只读文件做一些不同的事情),但理想情况下我想处理一般情况。
我写了一个跟踪另一个软件写的日志文件的软件。我使用FileSystemWatcher
的实例来监听文件系统更改。我注意到即使日志文件被第三方软件修改,也不会触发Changed
事件并且"日期被修改"文件资源管理器中显示的内容也未更新。
然后我发现打开日志文件(例如在记事本中)会强制更新时间戳(并随后触发Changed
的{{1}}事件。)
我得出结论,第三方正在使用某种流来更新日志,这些流没有改变最后修改的时间戳(可能永远不会关闭流?我不确定如何实现这一点)。手动打开日志文件基本上会刷新有关该文件的文件系统信息,这将让我的代码知道发生了更新。
我找到的解决方案是安排定期呼叫FileSystemInfo.Refresh
我正在监控的文件(比如每2秒)。如果文件未被更改,则不会发生任何事情(如预期的那样),但如果第三方附加了行,那么我的FileSystemWatcher
会引发FileSystemWatcher
事件。
它工作得非常好(虽然看起来并不漂亮),只是有些用户报告它没有做到这一点(如果他们在记事本中打开日志文件,日志监视过程会赶上)