gpt4 book ai didi

delphi - 测试磁盘是否具有写访问权限

转载 作者:行者123 更新时间:2023-12-03 19:01:45 25 4
gpt4 key购买 nike

我需要知道我的程序是否可以从运行位置将文件写入磁盘(HDD,软盘,闪存,CD)。
我已经尝试过类似的东西:

     {$I-}
Rewrite(myFile);
{$I+}
Result:= (IOResult = 0);


问题是,如果磁盘是只读磁盘,Windows会给我一条错误消息,告诉我


“ appName.exe-写保护错误磁盘无法写,因为它已被写保护。请从卷中删除写保护
驱动器D:中的USB_BOOT。取消尝试再次继续”


如何在不引发任何错误/警告消息的情况下测试写访问权限?
谢谢。



编辑:

好。 “错误”与上面提到的代码无关。我只认为它出现在那。我将代码移到只读磁盘上,然后从那里运行它。该错误出现在此行上的名为“ 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尝试写入应用程序的驱动器(只读驱动器)?

最佳答案

调用Windows API SetErrorMode()函数以禁用错误消息框。

编辑:

我只是试过了,这:

procedure TForm1.Button1Click(Sender: TObject);
var
Str: TStream;
OldMode: Cardinal;
begin
OldMode := SetErrorMode(SEM_FAILCRITICALERRORS);

try
try
Str := TFileStream.Create('z:\foo.txt', fmOpenReadWrite);
try

finally
Str.Free;
end;
except end;
finally
SetErrorMode(OldMode);
end;
end;


可以正常工作。

关于delphi - 测试磁盘是否具有写访问权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/738856/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com