Определите, когда файл был скопирован в каталог в Windows 7 - PullRequest
1 голос
/ 07 декабря 2010

Проблема:

В Windows XP следующий код позволил мне определить, был ли файл недавно скопирован в определенный каталог (записан или перезаписан) в определенный момент текущего дня.

Поведение в Win XP:

Если файл был записан или перезаписан в каталоге в текущий день, «LastAccessTime» вернет дату текущего дня.

Поведение в Windows 7:

Возвращает дату, указанную в поле «Доступ» в свойствах файла (то есть через проводник).

Примечания:

  • Когда я использую LastWriteTime , он возвращает «измененную» дату, указанную в свойствах файла, которая не обязательно является датой, когда файл был скопирован или перезаписан в текущем каталоге.

Код:

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
}

Ответы [ 3 ]

4 голосов
/ 07 декабря 2010

Начиная с Windows Vista, время последнего доступа по умолчанию не обновляется.Это должно улучшить производительность файловой системы.Вы можете найти подробности здесь:

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

Однако вы не заинтересованы в LastAccessTime, вы заинтересованы в LastWriteTime.

FileInfo a = new FileInfo(f);
if (a.LastWriteTime > DateTime.Today)
{
    //do something
}

BTW - ПримечаниеDateTime.Today.Он выдает тот же результат, что и ваш код "сегодня".

2 голосов
/ 07 декабря 2010

Если вы хотите проверить на запись , вы должны использовать 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);
            }
        }
    }
}

Я согласен, что LastAccessTime в Windows 7, похоже, не обновляется - я не уверен, почему.Похоже, это часть файловой системы - глядя на каталог с

dir /Ta

Я вижу те же результаты, что и при использовании LastAccessTime.Возможно, обновление отключило обновление информации о файловой системе при доступе.

1 голос
/ 07 декабря 2010

Вы говорите, написано / переписано, поэтому вы должны использовать LastWriteTime, а не LastAccessTime.

[править]

И LastAccessTime, по-видимому, по умолчанию отключен в Win7 для экономии ресурсов. Проверьте http://www.groovypost.com/howto/microsoft/enable-last-access-time-stamp-to-files-folder-windows-7/ о том, как включить его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...