问题:
在Windows XP上,以下代码允许我确定文件是否最近在当天的某个时刻被复制到某个目录(写入或覆盖)。
Win XP中的行为:
如果文件是在当天的目录中写入或覆盖的,“LastAccessTime”将返回当天的日期。
Windows 7中的行为:
它返回文件属性中“已访问”下列出的日期(即通过资源管理器)。
备注:
代码:
DateTime today = new DateTime(DateTime.Now.Year,DateTime.Now.Month,DateTime.Now.Day,0,0,0);
FileInfo a = new FileInfo("file.txt");
if (a.LastAccessTime > today)
{//do something
}
答案 0 :(得分:4)
从Windows Vista开始,默认情况下不会更新上次访问时间。这是为了提高文件系统性能。你可以在这里找到详细信息:
但是,你对LastAccessTime不感兴趣,你对LastWriteTime感兴趣。
FileInfo a = new FileInfo(f);
if (a.LastWriteTime > DateTime.Today)
{
//do something
}
BTW - 注意DateTime.Today。它产生与“今天”代码相同的结果。
答案 1 :(得分:2)
如果您要测试写作,请使用LastWriteTime
。例如,此代码会写出今天已修改的所有文件:
using System;
using System.IO;
class Test
{
static void Main()
{
DateTime today = DateTime.Today;
foreach (FileInfo file in new DirectoryInfo(".").GetFiles())
{
if (file.LastWriteTime >= today)
{
Console.WriteLine(file.Name);
}
}
}
}
我同意Windows 7中的LastAccessTime
似乎没有更新 - 我不知道为什么。这似乎是文件系统的一部分 - 用
dir /Ta
我看到与使用LastAccessTime
时相同的结果。可能是更新已禁用更新访问时的文件系统信息。
答案 2 :(得分:1)
你说是写/覆盖所以你应该使用LastWriteTime
而不是LastAccessTime
。
[编辑]
并且在Win7中似乎默认禁用LastAccessTime以节省资源。查看http://www.groovypost.com/howto/microsoft/enable-last-access-time-stamp-to-files-folder-windows-7/如何启用它。