FreePascal - 如何从一个位置复制文件并将其粘贴到另一个位置?
FreePascal - How can I copy a file from one location and paste it in another?
我正在尝试让程序将其自身的副本粘贴到 windows 启动文件夹中。我只能找到 FileUtils
、CopyFile()
中包含的 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.
我正在尝试让程序将其自身的副本粘贴到 windows 启动文件夹中。我只能找到 FileUtils
、CopyFile()
中包含的 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.