3

在给定路径的情况下,如何在 C++ 中获取 Windows 上文件的文件大小和日期戳?

4

4 回答 4

3

GetFileSize / GetFileSizeExGetFileInformationByHandleEx与 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.
于 2009-06-26T23:16:42.190 回答
3

如果您正在寻找可移植性,您也可以使用POSIX stat 。Windows 仍然支持它的使用。

于 2009-06-26T23:19:23.213 回答
3

要附加另一个答案,您可以调用GetFileTime来获取文件时间。这个 API 还需要一个句柄,我认为比 GetFileInformationByHandle API 更容易。顺便说一句,GetFileInformationByHandleEx 仅在 VISTA 及更高版本中受支持。

于 2009-06-26T23:22:59.977 回答
3

您可以使用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;
  }
}

然后文件大小在WIN32_FIND_DATAnFileSizeHigh的和nFileSizeLow成员中可用,时间戳在,和成员中可用。ftCreationTimeftLastAccessTimeftLastWriteTime

于 2009-06-26T23:24:01.833 回答