2009-06-26 198 views

回答

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_DATAnFileSizeHighnFileSizeLow成员可用,时间戳在ftCreationTimeftLastAccessTimeftLastWriteTime成员都可用。

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. 
3

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

+0

好主意,虽然在WinCE中似乎不可用。给予好评! – Qwertie 2009-06-29 15:52:18

3

要附加其他答案,请致电GetFileTime以获取文件时间。这个API也需要一个句柄,我认为比GetFileInformationByHandle API更容易。顺便说一句,GetFileInformationByHandleEx仅在VISTA及以上版本中受支持。

+0

我发誓这个api存在,但我对GetFileTimes(注意s)的搜索没有任何结果。接得好。 – Michael 2009-06-26 23:28:42

+0

无论如何,我的回答更多地意味着成为你的附加组件。我认为你是对这个问题更完整的回答,这就是我投票支持你的原因。 – 2009-06-27 00:42:26

相关问题