Как я могу сделать файлы из определенной папки и подпапок доступными только для чтения в delphi? Я знаю, что могу поместить папку с FileSetAttr только для чтения, но есть ли способ поместить файлы из папки и подпапок?
Спасибо
Как я могу сделать файлы из определенной папки и подпапок доступными только для чтения в delphi? Я знаю, что могу поместить папку с FileSetAttr только для чтения, но есть ли способ поместить файлы из папки и подпапок?
Спасибо
Вам нужно перебрать все файлы в каталоге и рекурсивно по всем подкаталогам. Вы можете использовать эту функцию, чтобы сделать это:
type
TFileEnumerationCallback = procedure(const Name: string);
procedure EnumerateFiles(const Name: string;
const Callback: TFileEnumerationCallback);
var
F: TSearchRec;
begin
if FindFirst(Name + '\*', faAnyFile, F) = 0 then begin
try
repeat
if (F.Attr and faDirectory <> 0) then begin
if (F.Name <> '.') and (F.Name <> '..') then begin
EnumerateFiles(Name + '\' + F.Name, Callback);
end;
end else begin
Callback(Name + '\' + F.Name);
end;
until FindNext(F) <> 0;
finally
FindClose(F);
end;
end;
end;
Это рутина общего назначения. Вы можете предоставить процедуру обратного вызова, которая будет вызываться с именем каждого файла. Внутри этой процедуры обратного вызова делайте все, что хотите.
Ваша процедура обратного вызова будет выглядеть так:
procedure MakeReadOnly(const Name: string);
begin
FileSetAttr(Name, FileGetAttr(Name) or faReadOnly);
end;
И вы бы соединили это так:
EnumerateFiles('C:\MyDir', MakeReadOnly);
FileSetAttr
для каждого файла, который вы найдете в папке и ее подпапках. Для этого поиска используйтеFindFirst
,FindNext
. - person TLama   schedule 17.02.2014