GetDiskFreeSpaceの挙動が XP と 2000で違う

GetDiskFreeSpace 関数は 指定したルートフォルダのディスク空き容量を返します。

しかし、次のような処理を行った時、 XP と 2000 で挙動が異なります。

hr=GetDiskFreeSpaceA("C:\\Windows\",&Cl,&Sc,&FreeC,&TNC);

Windows XPの場合は Cドライブの ドライブ情報が帰ってきますが、 Windows 2000の場合は、エラーが返り、ERROR_DIR_NOT_ROOT(このディレクトリはルート ディレクトリのサブディレクトリではありません。) となってしまいます。

そこで、Wrapper で次のように書き換えるわけです。

__declspec( dllexport ) int WINAPI GetDiskFreeSpaceA(char *a,DWORD *b,DWORD *c,DWORD *d,DWORD *e) {
    int z;
    char tmppath[260];
    lstrcpy(tmppath,a);
    do{
        z=GetDiskFreeSpaceA(tmppath,b,c,d,e);
        if(z)return z;
        else if(GetLastError()!=ERROR_DIR_NOT_ROOT){
            return 0;
        }
        do{
            z=lstrlen(tmppath)-1;
            tmppath[z]=0;
        }while(tmppath[z-1]!='\\'&&z);
    }while(z);
    return 0;
}

GetDiskFreeSpaceW も同様に書き換えが必要です。
KDW 0.81で対応予定です|゚ー゚)ノ

ちなみに、GetDiskFreeSpaceEx の場合は、XPの動作と同じになります。

関連サイト:
GetDiskFreeSpace 関数

おすすめ

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です