Как извлечь значение "Дата столбца" для конкретного файла для Windows 7 x64, в C++

Я хочу извлечь значение даты для определенного файла и сравнить его с датой изменения и датой создания в Visual C++.

Я видел, что могу извлечь Дата создания и Дата изменения, но я ничего не знаю о дате.

Я изменил некоторые файлы с помощью программного обеспечения с ошибками, и единственный столбец, в котором все еще указано правильное время, - это Дата. Как я могу извлечь это?

Я использую Windows 7 x64.

Здесь я видел только st_atime, st_ctime, st_mtime: http://msdn.microsoft.com/en-us/library/14h5k7ff.aspx

1 ответ

Решение

Windows хранит три метки времени для каждого файла или папки:

  • Время создания (время / дата, когда элемент был впервые создан)
  • Время последней модификации (время последней записи файла)
  • Время последнего доступа (время последнего доступа к файлу)

Есть несколько способов прочитать эти временные метки, но используя собственный Win32 API, вы можете сделать следующее:

LPCWSTR pszFileName = L"c:\\path\\to\\myfile.txt";
WIN32_FIND_DATA wfd;
HANDLE hFind = FindFirstFile(pszFileName, &wfd);
if (hFind != INVALID_HANDLE_VALUE)
{
    FindClose(hFind);
    // timestamps can now be found at:
    // wfd.ftCreationTime
    // wfd.ftLastAccessTime
    // wfd.ftLastWriteTime
}

Вы можете использовать такие функции, как FileTimeToSystemTime() преобразовать FILETIME значения (которые являются просто числом тиков с определенной даты) в более удобные для использования SYSTEMTIME структуры, которые дают вам день, месяц, год, час, минуту и ​​т. д.

Примечание. "Время последнего изменения" также обновляется для папок и файлов и указывает, когда в последний раз файл был изменен непосредственно внутри этой папки. Изменения временных меток папок не распространяются на родительские папки.

Примечание 2: "Время последнего доступа" более или менее устарело и по умолчанию отключено в новых версиях Windows. Вы можете включить его, используя настройки реестра.

Другие вопросы по тегам