Как извлечь значение "Дата столбца" для конкретного файла для 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. Вы можете включить его, используя настройки реестра.