フォーラム


ゲスト  

ようこそ ゲスト さん。このフォーラムに投稿するには 登録が必要です。

ページ: [1]
トピック: フォルダに書き込み可能かどうかを調べるには?
DEKO
管理者
投稿数: 2690
フォルダに書き込み可能かどうかを調べるには?
on: 2013/04/08 20:47 Mon

結局の所、実際に書き込んで試してみないとダメだった記憶があります。

↓こんな感じの関数作って、

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

ページ: [1]
WP Forum Server by ForumPress | LucidCrew
バージョン: 1.7.5 ; ページロード: 0.02 sec.