2009-06-26 201 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

相關問題