令人印象深刻的是没有使用Refresh的例子。
我正在使用以下方法,这会产生不准确的时间
ViewBag.t1 = System.IO.File.GetLastAccessTime(@"C:\BillingExport\BILLING_TABLE_FILE01_1.txt");
我读到这是不准确的,因为操作系统没有执行检查并更新了文件的读/写时间。
我试过
System.IO.FileSystemInfo.Refresh(@"C:\BillingExport\BILLING_TABLE_FILE01_1.txt");
但这不起作用,我无法找到一个资源,给出了类似的使用示例。
答案 0 :(得分:3)
FileSystemInfo.Refresh
不是静态方法。您为示例显示的内容无法编译。您应该创建一个使用文件名初始化的FileInfo
对象,然后可以在其上调用Refresh
。然后,您应该能够使用FileInfo
对象的属性来获取上次访问时间和其他相关文件详细信息。
var info = new FileInfo(@"C:\Temp\a.txt");
info.Refresh(@"C:\BillingExport\BILLING_TABLE_FILE01_1.txt");
var lastAccess = info.LastAccessTime;
基于上述链接possible duplicate 和CodeCaster答案的答案的最后一次编辑:
表示在Vista中默认禁用此功能。我刚刚在Win 8.1框中检查了注册表,果然,注册表项已存在,默认情况下禁用Last Access更新。所以,如果你在Vista或以上,上面的代码将无法正常工作。如果你使用XP而不是金色!
答案 1 :(得分:3)
FileSystemInfo是FileInfo和DirectoryInfo的抽象基类。其中缓存文件/目录的属性。如果你保留一个FileInfo对象并继续测试它的Exists属性,那么调用Refresh()就变得很重要。
哪个没有与File.GetLastAccessTime()有关。这些类完全不相关,File类不进行缓存,并始终从文件系统中检索上次访问时间。
如果文件被任何程序打开,则不可靠。当程序主动访问文件时,文件系统并不急于更新这些属性。这种方式过于昂贵,很容易花费数十毫秒才能将磁盘驱动器写头发送到存储这些值的MFT扇区。程序可以比这更快地访问文件很多。记录在this MSDN article:
并非所有文件系统都能记录创建和上次访问时间,并非所有文件系统都以相同方式记录它们。例如,FAT上的创建时间分辨率为10毫秒,而写入时间的分辨率为2秒,访问时间的分辨率为1天,因此它实际上是访问日期。 NTFS文件系统在上次访问后将文件的上次访问时间延迟最多1小时。
最相关的短语加粗,你看到的是非常期待的。您需要寻找不同的方法。