FreePascal - 如何从一个位置复制文件并将其粘贴到另一个位置?

FreePascal - How can I copy a file from one location and paste it in another?

我正在尝试让程序将其自身的副本粘贴到 windows 启动文件夹中。我只能找到 FileUtilsCopyFile() 中包含的 Lazarus 函数,但由于我没有使用 Lazarus,因此该解决方案对我不起作用。在 FreePascal 中还有其他方法可以做到这一点吗?我可以为 FreePascal 找到的与文件相关的所有其他内容都指的是文本文件或 File 类型。

您可以使用旧式 File 类型和例程将一个文件复制到另一个文件:

function CopyFile(const SrcFileName, DstFileName: AnsiString): Boolean;
var
  Src, Dst: File;
  Buf: array of Byte;
  ReadBytes: Int64;
begin
  Assign(Src, SrcFileName);
{$PUSH}{$I-}
  Reset(Src, 1);
{$POP}
  if IOResult <> 0 then
    Exit(False);

  Assign(Dst, DstFileName);
{$PUSH}{$I-}
  Rewrite(Dst, 1);
{$POP}
  if IOResult <> 0 then begin
    Close(Src);
    Exit(False);
  end;

  SetLength(Buf, 64 * 1024 * 1024);
  while not Eof(Src) do begin
{$PUSH}{$I-}
    BlockRead(Src, Buf[0], Length(Buf), ReadBytes);
{$POP}
    if IOResult <> 0 then begin
      Close(Src);
      Close(Dst);
      Exit(False);
    end;

{$PUSH}{$I-}
    BlockWrite(Dst, Buf[0], ReadBytes);
{$POP}
    if IOResult <> 0 then begin
      Close(Src);
      Close(Dst);
      Exit(False);
    end;
  end;

  Close(Src);
  Close(Dst);
  Exit(True);
end;

begin
  if not CopyFile('a.txt', 'b.txt') then
    Halt(1);
end.