<Return[G]><Top>

GetCompressedFileSize

Declare Function Api_GetCompressedFileSize& Lib "kernel32" Alias "GetCompressedFileSizeA" (ByVal lpFileName$, lpFileSizeHigh&)

Declare Function GetCompressedFileSize Lib "kernel32" Alias "GetCompressedFileSizeA" (ByVal lpFileName As String, lpFileSizeHigh As Long) As Long

指定されたファイルがディスク上で実際に占有しているサイズをバイト単位で取得する。ファイルを格納しているボリュームが圧縮機能をサポートしていて、ファイルが圧縮されている場合、圧縮済みのサイズを取得する。ファイルを格納しているボリュームがスパースファイル(疎なファイル、未使用の領域が多い、または同じ値が長く続くファイル)の自動圧縮をサポートしていて、指定されたファイルがスパースファイルである場合、スパースサイズを取得する。

パラメータ
lpFileName
    サイズを取得するべきファイルの名前を保持している、NULL で終わる文字列へのポインタを指定する。
    パイプや通信デバイスなど、シークができないデバイスに置かれているファイルの名前を指定しないこと。

    それらのデバイスのファイルサイズには意味がないからである。
lpFileSizeHigh
    1 個の変数へのポインタを指定する。関数から制御が返ると、この変数に、ファイルサイズの上位(high-order)DWORD が格納される。

    この関数の戻り値は、下位(low-order)DWORD である。
    ファイルサイズの上位 DWORD が不要な場合、NULL を指定できる。サイズが 4GB 未満のファイルでは、上位 DWORD は不要。

戻り値
    関数が成功すると、指定されたファイルがディスク上で実際に占有しているサイズの下位 DWORD が返る。

    また、lpFileSizeHigh パラメータが NULL ではない場合、このパラメータが指す変数に、ファイルサイズの上位 DWORD が格納される。 

    圧縮ファイルの場合は圧縮ファイルサイズ、非圧縮ファイルの場合は実際のファイルサイズである。
    lpFileSizeHigh パラメータが NULL の場合、関数が失敗すると、-1 が返る。

    拡張エラー情報を取得するには、GetLastError 関数を使う。
    lpFileSizeHigh パラメータが NULL ではなく、戻り値が -1 の場合は、アプリケーションは GetLastError を呼び出して、

    GetCompressedFileSize 関数が成功したか(GetLastError の戻り値は NO_ERROR)失敗したか(NO_ERROR 以外の値)

    判断しなければならない。

解説
    アプリケーションが、特定のボリュームが圧縮されているかどうかを調べるには、GetVolumeInformation 関数を呼び出し、次にその関数の

     lpFileSystemFlags パラメータが指す DWORD 値内の FS_VOL_IS_COMPRESSED フラグのステータスをチェックする。
    ファイルを格納しているボリュームが圧縮またはスパースファイルをサポートしていない場合、あるいはファイルが圧縮ファイルまたはスパースフ

    ァイルではない場合、GetFileSize 関数を呼び出した場合と同様、通常のファイルサイズが返る。