delphi 复制文件内容而不锁定文件

gajydyqb  于 2023-06-22  发布在  其他
关注(0)|答案(1)|浏览(129)

我正在处理计算机中的大型日志文件(约40 MB)。这些文件不断被写入。
我首先检查文件是否被更改,然后我使用CopyFile()将其复制到我自己,然后处理它。我认为这是好的,但在3台机器中,1台机器今天不再更新调试文件。
(only在我使用VNC将日志复制给我之后,它是否突然开始更新)
CopyFile()是否以某种方式阻止了文件?
如果是,是否有替代方法来复制文件而不锁定?

CopyFile(PChar(source), PChar(dest), FALSE);

更新1

现在我用途:

CopyFileExW(PChar(source), PChar(dest), nil, nil, nil, COPY_FILE_OPEN_SOURCE_FOR_WRITE);

使用另一个非常小的应用程序,我尝试在复制过程中写入文件:

procedure TForm1.Button1Click(Sender: TObject);
var
  F : TextFile;
begin
  inc(i);

  try
    AssignFile(F, '\\xxxx\xx\xx\xx\xx\xx\HJobs4.trc');
    try
      if FileExists('\\xxxx\xx\xx\xx\xx\xx\HJobs4.trc') then
        Append(F)
      else
        Rewrite(F);

      Writeln(F, '['+FormatDateTime('yyyy-MM-dd hh:nn:ss',now)+'] '+'WRITE TEST'+' '+i.ToString);
    finally
      CloseFile(F);
    end;
  except
    on E : Exception do
      Memo1.Lines.Add(DateTimeToStr(now)+' '+E.Message);
  end;
end;

我要做的就是开始复制。这需要一段时间。与此同时,我不停地执行另一个应用程序,在复制操作开始时我得到了一些I/O 103错误,这很糟糕。

vq8itlhq

vq8itlhq1#

我是这样解决的:

function TMain.CopyFileAcrossNetwork(source, dest : string): boolean;
var
  SrcStream : TFileStream;
  DestStream : TFileStream;
begin

  SrcStream := TFileStream.Create(Source,fmOpenRead + fmShareDenyNone);
  DestStream := TFileStream.Create(Dest, fmCreate);
  try

    DestStream.CopyFrom(SrcStream);

  finally
    SrcStream.Free;
    DestStream.Free;
  end;

这不会阻止文件。

相关问题