VC ++: Как получить время и дату файла? - PullRequest
3 голосов
/ 27 июня 2009

Как получить размер файла и отметку даты файла в Windows в C ++, учитывая его путь?

Ответы [ 4 ]

3 голосов
/ 27 июня 2009

Вы можете использовать FindFirstFile(), чтобы получить их одновременно, без необходимости открывать их (что требуется для GetFileSize() и GetInformationByHandle()). Это немного трудоемко, поэтому полезна небольшая обертка

bool get_file_information(LPCTSTR path, WIN32_FIND_DATA* data)
{
  HANDLE h = FindFirstFile(path, &data);
  if(INVALID_HANDLE_VALUE != h) {
    return false;
  } else {
    FindClose(h);
    return true;
  }
}

Тогда размер файла будет доступен в nFileSizeHigh и nFileSizeLow членах WIN32_FIND_DATA , а отметки времени доступны в ftCreationTime, ftLastAccessTime и ftLastWriteTime членах.

3 голосов
/ 27 июня 2009

Вы также можете использовать POSIX stat , если вы ищете мобильность. Windows по-прежнему поддерживает его использование.

3 голосов
/ 27 июня 2009

Чтобы добавить другой ответ, вы вызываете GetFileTime , чтобы получить только время файла. Этот API также требует дескриптора, и я думаю, что это проще, чем API GetFileInformationByHandle. Кстати, GetFileInformationByHandleEx поддерживается только в VISTA и выше.

3 голосов
/ 27 июня 2009

GetFileSize / GetFileSizeEx и GetFileInformationByHandleEx с FileBasicInfo может использоваться для извлечения этой информации.

Обе функции используют дескриптор, поэтому вам необходимо использовать CreateFile в пути до вызова этих функций.

// Error handling removed for brevity
HANDLE hFile = CreateFile(path, GENERIC_READ, FILE_SHARE_READ,
                 NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);

LARGE_INTEGER fileSize;
GetFileSizeEx(hFile, &fileSize);

FILE_BASIC_INFO fileInfo);
GetFileInformationByHandle(hFile, FileBasicInfo, fileInfo, sizeof(fileInfo));

// fileInfo.CreationTime is when file was created.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...