문제

__int64 i64FreeBytes
unsigned __int64 lpFreeBytesAvailableToCaller,
                 lpTotalNumberOfBytes,
                 lpTotalNumberOfFreeBytes; // variables used to obtain 
                                           // the free space on the  drive

GetDiskFreeSpaceEx (Manager.capDir,
(PULARGE_INTEGER)&lpFreeBytesAvailableToCaller,
(PULARGE_INTEGER)&lpTotalNumberOfBytes,
(PULARGE_INTEGER)&lpTotalNumberOfFreeBytes);

i64FreeBytes = lpTotalNumberOfFreeBytes;
_tprintf(_T ("Number of bytes free on the drive:%I64u \n"),
     lpTotalNumberOfFreeBytes);

Windows CE 명령 줄 응용 프로그램 인 데이터 관리 루틴을 작업 중입니다. 위의 코드는 폴더 manager.capdir를 포함하는 특정 드라이브에서 무료 바이트 수를 얻는 방법을 보여줍니다 (디렉토리의 전체 경로 이름을 포함하는 변수).

내 질문은 위의 코드 (_tprintf 문)에 의해보고 된 무료 바이트 수가 드라이브의 무료 바이트 수와 일치하지 않는다는 것입니다 (드라이브를 마우스 오른쪽 클릭하여 확인).

이 차이의 이유가 있는지 알고 싶습니다.

도움이 되었습니까?

해결책

디스크 할당량이 작동하지 않는 단일 사용자 시스템이 있습니다. 코드를 대화 상자 기반 MFC 애플리케이션에 게시하고 LPDirectoryName 매개 변수로 "C : "를 사용한 단일 프로비소를 사용하여 시스템에서보고 한 드라이브 여유 공간과 비교할 수있었습니다. 여유 공간은 폴더가 아닌 드라이브에만 의미가 있기 때문에 논리적으로 보였습니다.

처음에 나는 비슷한 문제를보고 있다고 생각했지만 수표를 다시 실행하고 (버튼에 묶었 고) 속성 대화 상자와 동일한 결과를 얻었습니다. 그 순간. 드라이브의 여유 공간은 상당히 역동적 인 수량 인 것 같습니다. 시스템 드라이브라면 크게 놀랍지 않습니다. 다른 포스터가 매우 올바르게보고 한 기준이 없더라도 속성과 정확히 동일한 숫자를 볼 수 없습니다. 대화가 실행되는 순간에 대화가보고됩니다.

다른 팁

문서를 인용 (편집) getDiskFreespaceEx, 강조 광산 :

lpfreebytesavailable [out, 선택 사항]-

디스크에서 총 자유 바이트 수를 수신하는 변수에 대한 포인터 호출 스레드와 관련된 사용자가 사용할 수 있습니다.

이 매개 변수는 null 일 수 있습니다.

사용자 당 할당량을 사용하는 경우이 값은 디스크의 총 자유 바이트 수보다 적을 수 있습니다.

lptotalnumberofbytes [out, 선택 사항]-

디스크의 총 바이트 수를 수신하는 변수에 대한 포인터 호출 스레드와 관련된 사용자가 사용할 수 있습니다.

이 매개 변수는 null 일 수 있습니다.

사용자 당 할당량을 사용하는 경우이 값은 디스크의 총 바이트 수보다 적을 수 있습니다.

디스크 또는 볼륨의 총 바이트 수를 결정하려면 ioctl_disk_get_length_info를 사용하십시오.

다시 말해,이 숫자는 사용자에 따라 다르며 Explorer가 반환 한 값을 일치시키려면 사용합니다. lpFreeBytesAvailable.

한 가지 가능성이 떠 오릅니다. 아마도 하나는 분할을 잃어버린 공간을 고려하지 않을 것입니다 (창은 일반적으로 드라이브 끝에 8MB를 남긴다). 기본적으로 물리적 드라이브에 남은 공간과 파티션으로 표시되는 논리적 인 공간 사이에는 차이가 있습니다. 또는 파일 시스템 자체에 분실 된 공간.

이것들이 실제로 사건인지 말할 수 없었지만, 나는 그것을 조사 할 것입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top