在给定路径的情况下,如何在 C++ 中获取 Windows 上文件的文件大小和日期戳?
问问题
7430 次
4 回答
3
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.
于 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
成员中可用,时间戳在,和成员中可用。ftCreationTime
ftLastAccessTime
ftLastWriteTime
于 2009-06-26T23:24:01.833 回答