如何使用System.IO.FileSystemInfo.Refresh

时间:2014-08-20 21:16:09

标签: c#

令人印象深刻的是没有使用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");

但这不起作用,我无法找到一个资源,给出了类似的使用示例。

2 个答案:

答案 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答案的答案的最后一次编辑

http://blogs.technet.com/b/filecab/archive/2006/11/07/disabling-last-access-time-in-windows-vista-to-improve-ntfs-performance.aspx

表示在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小时

最相关的短语加粗,你看到的是非常期待的。您需要寻找不同的方法。