문제

압축 디스크에 여유 공간을 가져와 최종 사용자에게 보여주고 싶습니다. Windows 2000 이상에서 C ++, MFC를 사용하고 있습니다. Windows API가 제공합니다 getDiskFreespaceEx () 기능.

그러나이 기능은 데이터의 "비 압축"크기를 반환하는 것으로 보입니다. 이것은 나에게 약간의 문제를 일으킨다.

예를 들면 : - 디스크 크기는 100GB입니다 - 데이터 크기는 90GB입니다 - 압축 데이터 크기는 80GB입니다.

사용자는 디스크가 90%가 가득 차 있지만 실제로는 80%에 불과합니다.


편집하다

Gleb가 지적했듯이 함수는 좋은 정보를 반환합니다.

그렇다면 새로운 질문은 다음과 같습니다. 압축 크기와 압축되지 않은 크기를 모두 얻을 수있는 방법이 있습니까?

도움이 되었습니까?

해결책

나는 당신이 모든 파일에 매핑해야한다고 생각합니다. getFilesize () 그리고 getCompressedFilesize () 그리고 그들을 요약합니다. 사용 getFileAttributes () 파일이 압축되었는지 여부를 아는 것은 전체 볼륨의 일부만 압축되는 경우, 확실히 그렇습니다.

Hum, 그래서 그것은 사소한 작전이 아닙니다. 모든 파일 크기를 항상 쿼리하지 않도록 약간의 메커니즘을 구현해야한다고 가정합니다. 내 말은 ... 800GB 하드 드라이브가 있다면 모든 파일 크기를 얻는 데 시간이 오래 걸릴 수 있습니다.

진실.

아마도 전체 스캔 (애플리케이션 시작)로 시작하여 사용자 정의 데이터 구조를 채우고, 예를 들어 파일 이름에서 파일 데이터 구조/클래스로 해시/맵을 채우고, 드라이브를 투표하십시오. findfirstchangenotification () 그에 따라 내부 구조를 업데이트하십시오.

"Joad Journals"에 대해 읽고 싶을 수도 있습니다. 나는 그들을 스스로 사용한 적이 없으므로 그들이 어떻게 작동하는지 모르지만 체크 아웃 할 가치가있을 수 있습니다.

다른 팁

함수는 여유 공간의 양을 올바르게 반환합니다. 이 간단한 프로그램을 사용하여 시연 할 수 있습니다.

#include <stdio.h>
#include <windows.h>

void main() {
    ULARGE_INTEGER p1, p2, p3;
    GetDiskFreeSpaceEx(".", &p1, &p2, &p3);
    printf("%llu %llu %llu\n", p1, p2, p3);
}

이전에 압축되지 않은 디렉토리를 압축 한 후 여유 공간이 자랍니다.

그래서 당신은 무엇에 대해 이야기하고 있습니까?

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