Mr.*_*ble 21 .net c# windows fileinfo
当我调用FileInfo(path).LastAccessTime或FileInfo(path).LastWriteTime正在写入的文件时,它返回创建文件的时间,而不是上次写入文件的时间(即现在).
有没有办法获得这些信息?
编辑:到目前为止的所有回复.我没有尝试,Refresh()但也没有尝试过.我返回文件开始写入的时间.静态方法也是如此,并创建了一个新的实例FileInfo.
Codymanix可能有答案,但我没有运行Windows Server(使用Windows 7),我不知道设置的测试位置.
编辑2:没有人觉得这个功能似乎不起作用很有趣?
Tom*_*ier 14
这些FileInfo值仅加载一次然后缓存.要获取当前值,请Refresh()在获取属性之前调用:
f.Refresh();
t = f.LastAccessTime;
Run Code Online (Sandbox Code Playgroud)
获取当前值的另一种方法是使用File类上的静态方法:
t = File.GetLastAccessTime(path);
Run Code Online (Sandbox Code Playgroud)
从Windows Vista开始,默认情况下不会更新上次访问时间.这是为了提高文件系统性能.你可以在这里找到细节:
要重新启用计算机上的最后访问时间,可以运行以下命令:
fsutil行为设置disablelastaccess 0
正如 James 指出的LastAccessTime 没有更新。
自 Vista 以来,LastWriteTime 也经历了一些变化。当进程仍然打开文件并且另一个进程检查 LastWriteTime 时,它将在很长一段时间内看不到新的写入时间——直到进程关闭文件。
作为解决方法,您可以从外部进程打开和关闭文件。完成后,您可以尝试再次读取 LastWriteTime,这是最新值。
文件系统隧道:
如果应用程序实现了诸如关闭文件的滚动记录器之类的功能,然后将其重命名为不同的文件名,您也会遇到问题,因为操作系统会记住“旧”文件的创建时间和文件大小,尽管您确实创建了一个新文件。这包括文件大小的错误报告,即使您确实从头开始重新创建了大小仍然为 0 字节的 log.txt。此功能称为 OS 文件系统隧道,它仍然存在于 Windows 8.1 中。有关如何解决此问题的示例,请查看Enterprise Library 中的 RollingFlatFileTracelistener。
您可以从 cmd shell 中查看文件系统隧道对您自己机器的影响。
echo test > file1.txt
ren file1.txt file2.txt
Wait one minute
echo test > file1.txt
dir /tc file*.txt
...
05.07.2015 19:26 7 file1.txt
05.07.2015 19:26 7 file2.txt
Run Code Online (Sandbox Code Playgroud)
文件系统是一个状态机。如果您关心性能和正确性,则很难保持状态正确同步。
这种奇怪的隧道综合症显然仍然被应用程序使用,例如自动保存文件并将其移动到保存位置,然后在同一位置再次重新创建文件。对于这些应用程序,给文件一个新的创建日期是有意义的,因为它只是被复制了。一些安装程序也会使用这样的技巧来临时将文件移动到不同的位置,并稍后将内容写回以通过某些文件是否存在检查某些安装挂钩。
| 归档时间: |
|
| 查看次数: |
19931 次 |
| 最近记录: |