Battlefield 2의 1.02 패치가 나왔는데, 이게 내 PC에서는 설치가 안된다. 패치 로그 파일이 생성되길래 들여다 보았더니, 내 디스크의 남은 공간이 마이너스로 표시되어 있었다. 예전 회사에서 분명히 디스크 공간이 남아있는데도 디스크가 모자란다는 에러가 난다는 사용자 문의가 있었는데, 회사 내에서 재현이 불가능하였고, downloader/patcher는 내 담당이 아니었기에 조금 끄적거려보다가 만 것이 기억이 나서 좀 뒤져보았는데.

Windows에서 디스크의 남은 용량을 조사하는 API는 _getdiskfree와 GetDiskFreeSpace, GetDiskFreeSpaceEx가 있는데, 일단 GetDiskFreeSpace는 2GB가 넘는 볼륨에 대해서는 신뢰할 수 없으므로 사용하면 안된다. _getdiskfree는 cluster와 sectors/cluster, bytes/sector 등의 정보를 얻을 수 있으므로 이 값들로 계산하는 디스크의 남은 공간을 byte단위로 알 수 있다. 하지만, GetDiskFreeSpaceEx를 이용하면 저렇게 계산할 필요가 없이 바로 byte단위로 알 수 있는데, 문제는 ULARGE_INTEGER라는 DWORD값 두개로 high part와 low part를 나누어서 표현하는 자료형을 사용한다는 것이다. 이건64-bit unsigned value이므로 무언가 엄한 짓을 하지 않는 한 마이너스가 될 수가 없다.
top