힘들면 쉬었다 가자.

2G 이상 되는 파일의 파일사이즈 구하기 본문

프로그래밍/윈도우즈 프로그래밍

2G 이상 되는 파일의 파일사이즈 구하기

오클라호마호 2011. 2. 27. 22:14


회사에서 usb도 안되고 메신저도 안되고 뭐,,

어지간한건 다 막아놨습니다.

업무적으로든 비업무적으로든 가끔 파일을 주고 받을 경우가 있어서

그냥 쪼그만 프로그램 만들어서 파일 옮기고 그럽니다.

 

근데, 언젠가 좀 큰 파일을 옮길라고 하니깐

이게 안되네요,,

문제가 뭐지??

하고 봤더니 파일 크기가 2G가 넘어가면 파일 사이즈를 구하지 못하더군요,,

 

문제의 원인은 파일 사이즈를 fseek, ftell을 이용해서 계산을 했는데

리턴 타입이 long형이라서 그랬던 것 같습니다.

 

인터넷에 뒤져보니 뭐,, 금방 답 나오네요

 

 

일단 오늘의 테스트 파일


2.3G짜리 압축 파일입니다.


아래 코드는 fseek과 ftell을 이용한 파일 사이즈 구하기 입니다.



결과는 아래와 같습니다.

-1을 리턴해 주네요,,

  

 

GetFileSize 함수를 이용하면 2G 넘어가는 파일의 사이즈도 정확하게 구할 수 있습니다.

참고로 C표준함수는 아닙니다..

윈도우즈 환경에서만 사용 가능

msdn : http://msdn.microsoft.com/en-us/library/aa364955(VS.85).aspx





결과는 아래와 같습니다.


 

뭐,, 콤마가 없어서 보기는 좀 그렇지만,,

어쨌든 사이즈는 정확하게 나오네요

 

 

 

참고로 vs2005이상에서는 _ftelli64라는 함수를 이용해서 간단하게 구할 수 있는 것 같습니다.

회사에서 쓰는 vs버전이 2003이라서,,

실제로 테스트는 못해봤네요

msdn : http://msdn.microsoft.com/en-us/library/0ys3hc0b(VS.80).aspx



GetFileSize 함수보다 사용이 좀 더 편한

GetFileSizeEx 함수가 있네요~

 

실행 결과는 당근 동일합니다~

다만 필요한 변수가 GetFileSize는 두개고(상위 비트, 하위 비트)

GetFileSizeEx는 그냥 LARGE_INTEGER의 포인터 하나만 있으면 됩니다.

 

msdn : http://msdn.microsoft.com/en-us/library/aa364957(VS.85).aspx




Comments