2009-06-26 6 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 회원에서 사용할 수 있습니다 유용하고, 타임 스탬프가 ftCreationTime, ftLastAccessTimeftLastWriteTime 회원에서 사용할 수 있도록하지만, 조금 힘드는입니다.

+1

예제에는 세 가지 오류가 있으며 타임 스탬프를 디코딩하는 방법에 유의해야합니다. FileTimeToSystemTime을 호출하십시오. 어쨌든 감사합니다. – Qwertie

+0

죄송합니다. 서둘러 쓰기! 이제 해결되었습니다. :-) – DannyT

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에서 사용할 수없는 것처럼 보이지만 좋은 아이디어입니다. Upvote! – Qwertie

3

다른 답변을 추가하려면 GetFileTime으로 전화하여 파일 시간 만 가져옵니다. 이 API는 또한 핸들을 요구하며 GetFileInformationByHandle API보다 쉽습니다. BTW GetFileInformationByHandleEx는 VISTA 이상에서만 지원됩니다.

+0

나는이 api가 존재한다고 맹세했지만, GetFileTimes (검색 결과)에 대한 나의 검색은 아무 것도 떠오르지 않았다. 좋은 캐치. – Michael

+0

내 답변은 어쨌든 애드온으로 추가 될 예정이었습니다. 나는 너의 것을 질문에 대한 더 완전한 대답으로 본다. 그래서 내가 네게 투표했다. –

관련 문제