在给定路径的情况下,如何在 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成员中可用,时间戳在,和成员中可用。ftCreationTimeftLastAccessTimeftLastWriteTime
于 2009-06-26T23:24:01.833   回答