Мне нужно знать, может ли моя программа записывать файлы на диск (HDD, дискета, флэш-диск, CD), с которого она работает.
Я пробовал что-то вроде:
{$I-}
Rewrite(myFile);
{$I+}
Result:= (IOResult = 0);
Проблема в том, что если диск только для чтения, Windows выдает сообщение об ошибке, сообщающее, что
"appName.exe - Ошибка защиты от записи. Диск не может быть записан, так как он защищен от записи. Снимите защиту от записи с тома
USB_BOOT на диске D :. Отмена TryAgain Continue "
Как я могу проверить доступ на запись без каких-либо сообщений об ошибках или предупреждений?
Благодаря.
Edit:
Ok. «Ошибка» не имеет ничего общего с вышеупомянутым фрагментом кода. Я только думал, что он там появляется. Я перемещаю код на диск только для чтения и запускаю его оттуда. Ошибка появляется в функции под названием «CreateShortcutEx», в этой строке:
MyPFile.Save(PWChar(WFileName),False);
MyPFile объявлен так:
var
MyObject : IUnknown;
MySLink : IShellLink;
MyPFile : IPersistFile;
Directory : String;
WFileName : WideString;
MyReg : TRegIniFile;
begin
MyObject := CreateComObject(CLSID_ShellLink);
MySLink := MyObject as IShellLink;
MyPFile := MyObject as IPersistFile;
.....
end;
Итак, почему MyPFile пытается записать на диск приложения (тот, который доступен только для чтения), если параметр WFileName имеет значение «C: \ documents and settings \ bla bla»?