Delphi MoveFileEx在重新启动后不删除文件

Delphi MoveFileEx在重新启动后不删除文件,delphi,winapi,delphi-10.3-rio,movefileex,Delphi,Winapi,Delphi 10.3 Rio,Movefileex,有人可以解释为什么在以下代码中,重启后不删除文件?谢谢 program Project1; {$APPTYPE CONSOLE} {$R *.res} uses Winapi.Windows, System.SysUtils; var FileName: array[0..128] of Char; FileNameZip: string; begin try GetModuleFileName(HInstance, FileName, 128);

有人可以解释为什么在以下代码中,重启后不删除文件?谢谢

program Project1;

{$APPTYPE CONSOLE}

{$R *.res}

uses
  Winapi.Windows,
  System.SysUtils;

var
  FileName: array[0..128] of Char;
  FileNameZip: string;

begin
  try
    GetModuleFileName(HInstance, FileName, 128);
    FileNameZip := IncludeTrailingPathDelimiter(GetEnvironmentVariable('USERPROFILE') + '\Downloads') + ChangeFileExt(ExtractFilename(FileName), '.zip');

    Writeln(FileName);
    Writeln(FileNameZip);

    if not MoveFileEx(FileName, nil, MOVEFILE_DELAY_UNTIL_REBOOT) then
      SysErrorMessage(GetLastError);

    if not MoveFileEx(PWideChar(FileNameZip), nil, MOVEFILE_DELAY_UNTIL_REBOOT) then
      SysErrorMessage(GetLastError);
  except
    on E: Exception do
      Writeln(E.ClassName, ': ', E.Message);
  end;
  Readln;
end.

您是否已在HKLM\System\CurrentControlSet\Control\Session Manager\PendingFileRenameOperations检查注册表中是否有为文件创建的条目?获取用户
下载文件夹路径的正确方法是使用
SHGetKnownFolderPath(FOLDERID\u下载)
。另外,您的
文件名
缓冲区太小,它应该是
最大路径
(260)个字符的最小值。我无法重现此问题,因为它适合我。请检查
MoveFileEx
的操作是否成功?如果失败,请共享错误代码。@RitaHan MSFT,错误\访问\被拒绝,我应该以管理员身份执行。现在开始工作了!非常感谢。您是否已检查HKLM\System\CurrentControlSet\Control\Session Manager\PendingFileRenameOperations注册表中是否有为文件创建的条目?获取用户
下载
文件夹路径的正确方法是使用
SHGetKnownFolderPath(FOLDERID\u下载)
。另外,您的
文件名
缓冲区太小,它应该是
最大路径
(260)个字符的最小值。我无法重现此问题,因为它适合我。请检查
MoveFileEx
的操作是否成功?如果失败,请共享错误代码。@RitaHan MSFT,错误\访问\被拒绝,我应该以管理员身份执行。现在开始工作了!非常感谢你。