【发布时间】:2009-06-26 23:14:40
【问题描述】:
在给定路径的情况下,如何使用 C++ 在 Windows 上获取文件的文件大小和日期戳?
【问题讨论】:
标签: c++ windows file date size
在给定路径的情况下,如何使用 C++ 在 Windows 上获取文件的文件大小和日期戳?
【问题讨论】:
标签: c++ windows file date size
您可以使用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_DATA的nFileSizeHigh和nFileSizeLow成员中可用,时间戳在ftCreationTime、ftLastAccessTime和ftLastWriteTime成员中可用。
【讨论】:
如果您正在寻找可移植性,您也可以使用POSIX stat。 Windows 仍然支持它的使用。
【讨论】:
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.
【讨论】:
要附加其他答案,请致电 GetFileTime 以获取文件时间。这个 API 还需要一个句柄,我认为比 GetFileInformationByHandle API 更容易。顺便说一句,GetFileInformationByHandleEx 仅在 VISTA 及更高版本中受支持。
【讨论】: