前一段时间,我不记得在哪里,我读过有关delphi的最佳实践。
代替这个:
if FileExists(MyFile) then begin
if not DeleteFile(MyFile) then
ShowMessage('Unable to delete file');
end;
Run Code Online (Sandbox Code Playgroud)
写这个:
if not DeleteFile(MyFile) then
ShowMessage('Unable to delete file');
Run Code Online (Sandbox Code Playgroud)
他的优点和缺点是什么?
为了清楚起见,我阅读您问题中的代码是为了删除文件,并且仅在文件存在且无法删除时报告错误。
最好不要在尝试删除文件之前检查文件是否存在。实际上,这样做是经典的反模式。
正确的模式是尝试直接删除文件。如果失败,请检查失败原因。这将告诉您该文件是否存在,或由于其他原因删除失败。在Windows上,这意味着使用命名为Win32 API的函数,DeleteFile并检查其返回值是否成功。如果发生故障,请致电GetLastError以获取故障原因。
以跨平台的方式做到这一点并不容易,而且我不认为RTL提供这种功能。
值得指出的是,您的两个代码块不可互换。他们有不同的行为。第一个块将不存在的文件视为成功。第二个将其视为错误。如果只希望通过单个函数调用来重现第一个行为,则如上所述,您需要根据错误代码进行区分。
打电话FileExists()是没有意义的。
该文件可能存在,但不能删除-例如,如果它是只读/只读文件,或者被另一个进程锁定。它不会比打电话更快DeleteFile()。
因此,首选第二版:
if not DeleteFile(MyFile) then
ShowMessage('Unable to delete file');
Run Code Online (Sandbox Code Playgroud)
注意:DeleteFile()来自SysUtils.pas的是跨平台的,并且返回一个布尔值以获取成功-因为注释和某些答案仅处理来自Windows.pas的原始API调用。
| 归档时间: |
|
| 查看次数: |
187 次 |
| 最近记录: |