|
16番会議室「玉石混淆みんなで作るSample蔵」に寄せられたサンプル
"ファイルのReadOnly属性を外す"
みなさん、こんにちは。
雑誌付録のCD-ROMからサンプルとなるソースやその他のものをディスクにコピー
したあと、ファイルの属性に「読取専用」のチェックボックスを外すのをめんど
くさいと感じたことはないですか。特に何階層もディレクトリがあった場合はと
ってもめんどくさいと私は思うことがあります。
そこで以下のような手続きを考えました。
添削をお願いします(^^)
//指定されたディレクトリ配下のファイル属性からReadOnlyを取り除く
procedure SetNotReadOnly(ADir:string);
var
Handle: THandle; // FindFirst/FindNext用
F: TWin32FindData; // 検索構造体
SubDir: string; // 探索するサブディレクトリ
SearchPath: string; // 探索用フルパス
OldAttr,NewAttr:word; // 設定用アトリビュート
Dir:string;
begin
if ADir = '' then
begin
Dir := GetCurrentDir;
if SelectDirectory(Dir,[],-1) then
begin
ADir := Dir;
end else
begin
Exit;
end;
end;
SearchPath := ADir;
if (not (UpperCase(SearchPath)[1] in ['A'..'Z'])) or
(not (UpperCase(Copy(SearchPath,2,1)) = ':')) or
(not (UpperCase(Copy(SearchPath,3,1)) = '\')) then
begin
Exit;
end;
case GetDriveType(PChar(Copy(SearchPath,1,3))) of
DRIVE_FIXED,DRIVE_REMOTE:
begin
end;
else
begin
Exit;
end;
end;
if SearchPath[Length(SearchPath)] ='\' then
SearchPath := ADir + '*.*'
else SearchPath := ADir + '\*.*';
Handle := FindFirstFile(PChar(SearchPath), F);
try
if Handle <> INVALID_HANDLE_VALUE then
begin
repeat
if (F.dwFileAttributes and FILE_ATTRIBUTE_READONLY) <> 0 then
begin
OldAttr := FileGetAttr(ExtractFilePath(SearchPath) + F.cFileName);
NewAttr := OldAttr;
NewAttr := NewAttr and not faReadOnly;
FileSetAttr(ExtractFilePath(SearchPath) + F.cFileName,NewAttr);
end;
if (F.dwFileAttributes and FILE_ATTRIBUTE_DIRECTORY) <> 0 then
begin
if F.cFileName[0] <> '.' then
begin
SubDir := ExtractFilePath(SearchPath) + F.cFileName;
SetNotReadOnly(SubDir);
end;
end;
Application.ProcessMessages;
until FindNextFile(Handle, F) = False;
end;
finally
Windows.FindClose(Handle);
end;
end;
98/06/08(月) 00:19 十兵衛(BZT01311)
Original document by 十兵衛 氏 ID:(BZT01311)
ここにあるドキュメントは NIFTY SERVEの Delphi Users' Forum の16番会議室「玉石混淆みんなで作るSample蔵」に投稿されたサンプルです。これらのサンプルはボーランド株式会社がサポートする公式のものではありません。また、必ずしも動作が検証されているものではありません。これらのサンプルを使用したことに起因するいかなる損害も投稿者、およびフォーラムスタッフはその責めを負いません。使用者のリスクの範疇でご使用下さい。
Copyright 1996-2002 Delphi Users' Forum
|