윈도우 프로그램에서 파일 사이즈를 구하는 방법은 다양합니다.
여기에서는 WIN32_FIND_DATA 구조체와 FindFirstFile 함수를 이용하는 방법을 설명합니다.
ULONGLONG GetFileSize(CString strFilePath)
{
WIN32_FIND_DATA stFindData;
ULONGLONG ullFileSize = 0;
if (FindFirstFile(strFilePath, &stFindData) == INVALID_HANDLE_VALUE)
return ullFileSize;
// 파일 사이즈 계산
ullFileSize = (ULONGLONG) MAXDWORD;
ullFileSize++;
ullFileSize = ullFileSize * ((ULONGLONG) stFindData.nFileSizeHigh);
ullFileSize = ullFileSize + ((ULONGLONG) stFindData.nFileSizeLow);
return ullFileSize;
}
GetFileSize 함수는 파일명까지 포함하는 전체 경로를 나타내는 문자열을 파라메터로 받고,
해당 파일이 존재하면 파일 사이즈를 구하여 리턴(unsigned long long)하는 함수 입니다.
WIN32_FIND_DATA 구조체 내부에 파일 사이즈와 관련된 변수가 두개있습니다.
nFileSizeHigh, nFileSizeLow 인데, 이 두변수는 파일 사이즈의 상위 4바이트와 하위 4바이트를 표현합니다.
즉, 두 변수를 조합하여 최대 8바이트 크기의 파일 사이즈를 나타낼 수 있습니다.
위의 계산식 중 MAXDWORD(0xFFFFFFFF)에 1을 더하여 nFileSizeHigh에 곱한 것이 상위 4바이트로 계산한 것입니다.
(이 연산은 비트 연산의 SHIFT 연산을 이용하여 계산할 수도 있습니다.)
상위 4바이트를 계산한 후 하위 4바이트인 nFileSizeLow를 더하여 주면 실제 파일 사이즈가 됩니다.
'프로그래밍' 카테고리의 다른 글
[Java] Spring에서 Gradle 사용 시 설정 파일 기본 내용 (0) | 2016.01.18 |
---|---|
[Git] Git에 관련된 자료 (0) | 2014.11.05 |
Objective-C Types : NSLog Formats (0) | 2014.05.13 |
[iOS] UIView 클래스 계층도 (0) | 2014.04.21 |
[iOS, OS X] iOS, MAC 개발 관련 참고 사이트들 (0) | 2014.04.17 |