как сбросить атрибуты файла с помощью FileCopy () - PullRequest
2 голосов
/ 25 мая 2011

Я использую функцию Filecopy () для копирования файлов с носителя CDROM, похоже, что атрибут READONLY скопирован, и это вызывает проблемы с переустановкой.

как удалить атрибут только для чтения?

1 Ответ

4 голосов
/ 25 мая 2011

Встроенные функции поддержки не имеют подпрограммы для этого.

Так что это сводится к одному из нескольких других вариантов.

  1. Вы можете вызвать ShellExecute, используя attrib -r C:\path\FileName.txt
  2. Вы можете встроить эту функциональность в DLL и импортировать DLL
  3. Вы можете использовать COM-объект для этого
  4. Вызовите Windows API напрямую. ОБНОВЛЕНО

Вот пример функции, которая делает это с COM

procedure RemoveReadOnly(FileSpec : String);
var
 FSO : Variant;
 File : Variant;
begin
 FSO := CreateOleObject('Scripting.FileSystemObject');
 File := FSO.GetFile(FileSpec);
 if File.attributes and 1 then // Check if Readonly already
    File.attributes := File.attributes - 1;
end;

MSDN Содержит документацию по FilesSystemObject и использованиеиз Атрибуты .

ОБНОВЛЕНО

Вот пример прямого вызова Windows API, который является наилучшим вариантом.

function GetFileAttributes(lpFileName: PAnsiChar): DWORD;
 external 'GetFileAttributesA@kernel32.dll stdcall';

function SetFileAttributes(lpFileName: PAnsiChar; 
   dwFileAttributes: DWORD): BOOL; 
external 'SetFileAttributesA@kernel32.dll stdcall';

procedure RemoveReadOnly(FileName : String);
var
 Attr : DWord;
begin
  Attr := GetFileAttributes(FileName);
  if (Attr and 1) = 1  then          
  begin
    Attr := Attr -1;
    SetFileAttributes(FileName,Attr);
  end;
end;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...