Duk*_*ade 7 c# file-io windows-server-2008
我编写了一个工具来收集工具用户指定的时间窗口内的日志文件.到目前为止,我通过在日志文件上使用File.GetLastWriteTime方法来建立日志文件集合,将其与用户输入和收集的时间进行比较,并根据这些比较的结果进行收集.这是一个小代码片段:
DateTime logFileEnd = File.GetLastWriteTime(matchingActiveLogFile);
Run Code Online (Sandbox Code Playgroud)
但是我注意到我的工具没有收集我认为它应该完成的一些日志文件.看来这个方法返回的DateTime已经过时了(文件中最近的日志记录比这个日期时间的值更多).
当我查看相关文件的"修改日期"时,它也"过时",文件中的最新日志记录比"修改日期"更新.
我如何才能获得准确的"GetLastWriteTime"或"修改日期"值?
Tig*_*ran 10
在我的经历中,我抛出了一些像你这样的问题.在Windows Vista/7系统上,功能并不总能返回可靠的结果.
过了一会儿,我们发现了这个链接:在Windows Vista中禁用上次访问时间以提高NTFS性能
一个敏锐的Windows Vista用户注意到一个名为的注册表
NtfsDisableLastAccessUpdate
,HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\ControlFileSystem
并询问我们这意味着什么.上次访问时间是在访问或以其他方式触摸文件时更新的文件属性.(这通常与上次修改时间混淆,后者仅在文件更改时更新.)上次访问时间具有松散的粒度,仅保证时间在一小时内准确.
在Windows Vista中,我们禁用了对上次访问时间的更新以提高NTFS性能.如果您使用的是依赖于此值的应用程序,则可以使用以下命令启用它:
fsutil behavior set disablelastaccess 0
您必须重新启动计算机才能使此更改生效.有关Fsutil命令和上次访问时间的详细信息,请参阅Fsutil联机帮助.
基于此,很明显最后的访问时间不能用作"强密钥".要解决该问题,我们只是停止GetLastWriteTime
呼叫中继 ,但是存储文件的最后更改值或其名称"FileName_yyyymmdd"
,或者在某个字段中的文件内部.
还有另一种解决方案GetLastAccessTime
可以在这里找到:
.NET FileInfo.LastWriteTime和FileInfo.LastAccessTime错误,在您的情况下也可能有用.
我对此的一般看法是:不要转发该参数,而是在您的架构中发明其他东西.
祝好运