본문 바로가기
프로그래밍

[WIN] WIN32_FIND_DATA 와 FindFirstFile 을 이용한 파일 사이즈 구하기 (GetFileSize)

by 밝음의기둥 2014. 11. 3.
반응형

윈도우 프로그램에서 파일 사이즈를 구하는 방법은 다양합니다. 

여기에서는 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를 더하여 주면 실제 파일 사이즈가 됩니다.

반응형