プログラムが実行中の場所からディスク (HDD、フロッピー、フラッシュ、CD) にファイルを書き込めるかどうかを知る必要があります。私は次のようなことを試しました:
{$I-}
Rewrite(myFile);
{$I+}
Result:= (IOResult = 0);
問題は、ディスクが読み取り専用の場合、Windows から次のようなエラー メッセージが表示されることです。
「appName.exe - 書き込み保護エラー ディスクは書き込み保護されているため、書き込みできません。ドライブ D: のボリューム USB_BOOT から書き込み保護を解除してください。キャンセル TryAgain 続行」
エラー/警告メッセージを表示せずに書き込みアクセスをテストするにはどうすればよいですか? ありがとう。
編集:
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;
では、WFileName パラメータが "C:\documents and settings\bla bla" の場合、MyPFile がアプリケーションのドライブ (読み取り専用のドライブ) に書き込もうとするのはなぜですか?