結局の所、実際に書き込んで試してみないとダメだった記憶があります。
↓こんな感じの関数作って、
function IsWritableFolder(aPath: string): Boolean; var hFile: THandle; dFileName: String; begin result := False; if not DirectoryExists(aPath) then Exit; dFileName := IncludeTrailingPathDelimiter(aPath) + 'writablecheck.temporary'; UniqueString(dFileName); hFile := CreateFile(PChar(dFileName), GENERIC_WRITE, 0, nil, CREATE_ALWAYS, FILE_ATTRIBUTE_TEMPORARY or FILE_FLAG_DELETE_ON_CLOSE, 0); result := (hFile <> INVALID_HANDLE_VALUE); if result then CloseHandle(hFile); end;
↓こんな感じで使います。
procedure TForm1.Button1Click(Sender: TObject); const MSG: array [Boolean] of string = ('書き込めないよ...orz', '書き込めるよ (^o^)/'); begin // Edit1 に入力されたパスに対して書き込み可能か調べる ShowMessage(MSG[IsWritableFolder(Edit1.Text)]); end;
ちゃんと権限を調べて書き込みチェックをやろうとした場合、
確かどっちかの問題で挫折しました。「鶏が先か卵が先か」って話になって、最終的に "実際に書き込んでテストするしかない" という結論に至ったのだったと記憶しています。
See Also:
[ [QC#107686] function DirectoryExists does not work – checking ERROR_BAD_NET_NAME is missing.]
http://ht-deko.minim.ne.jp/delphiforum/?vasthtmlaction=viewtopic&t=604
|