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 関数
Comments