2009-05-25 12 views
2

圧縮ディスクの空き領域をエンドユーザーに表示します。私はWindows 2000でC++、MFCを使用しています。 Windows APIには、GetDiskFreeSpaceEx()機能があります。圧縮ディスクを使用したGetDiskFreeSpaceEx

ただし、この関数はデータの「圧縮されていない」サイズを返しているようです。これは私にいくつかの問題を引き起こします。例えば

: - ディスクのサイズが100ギガバイト である - データサイズは90ギガバイト です - 圧縮データのサイズが80ギガバイト

あるユーザーは、ディスクが90%でいっぱいであることがわかりますが、現実になり、それわずか80%で満員です。グレブが指摘したように


EDIT

、機能は良い情報を返しています。

ここに新しい質問があります:圧縮されたサイズと圧縮されていないサイズの両方を取得する方法はありますか?

答えて

1
私はと GetCompressedFileSize()を使用すると、すべてのファイル、GetFileSize(でクエリを超えるマッピングしなければならないと思う

、それらをまとめます。 GetFileAttributes()を使用して、ファイル全体が圧縮されている場合にファイルが圧縮されているかどうかを確認します。

ハム、そうではありません 操作です。私はすべて ファイルサイズを常に照会するのを避けるために、 のメカニズムを実装しなければならないと思います。私は... 私は800GBのハードドライブを持っていれば、それは すべてを得るためにかなり長い時間がかかります ファイルサイズ:

真。

おそらくフルスキャン(アプリケーションの起動)から始まり、カスタムデータ構造にデータを取り込むことができます。ファイル名からファイルデータ構造体/クラスへのハッシュ/マップを作成し、FindFirstChangeNotification()でドライブをポーリングし、それに応じて内部構造を更新します。

また、「ジャーナルの変更」についてお読みになりたい場合もあります。私はそれらを一度も使ったことがないので、彼らの仕組みはわからないが、チェックアウトする価値があるかもしれない。

+0

ハム、それは簡単な操作ではありません。私はすべてのファイルのサイズを常に照会するのを避けるためにいくつかの仕組みを実装しなければならないと思います。 私は800GBのハードドライブがあれば、すべてのファイルサイズを取得するのに非常に時間がかかることがあります。 – Nicolas

+0

あなたのメモにコメントを追加しました。私のポストを参照してください。 – ralphtheninja

1

この関数は、空き領域の量を正しく返します。このシンプルなプログラムを使って実証することができます。

#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); 
} 

以前に圧縮されていないディレクトリを圧縮すると、空き容量が増えます。

あなたは何について話していますか?

関連する問題