C# 复制正在写入的文件

本文关键字:文件 复制 | 更新日期: 2023-09-27 18:32:48

我已经阅读了许多其他关于这个主题的文章,但没有一篇似乎直接解决了我的问题(这让我感到惊讶(。

无论。。。我写了一个日志解析器,非常简单地,我希望在解析文件之前从本地远程机器复制文件。 我尝试复制的文件不断被写入,我在复制它时取得了"随机"成功。 有时它会起作用,有时我会得到"访问被拒绝"或文件访问错误。 其他几点:

  • 每当我使用 Windows 资源管理器在本地复制文件时,我从不
    复制它时遇到问题(这让我相信它是完美的
    可以 100% 的时间复制文件(。
  • 我总是可以在删除位置使用文本编辑器打开文件。
  • 我不拥有正在写入的文件,并且不希望将其"锁定",以便实际写入此文件的应用程序失败。

有人对如何复制此文件有任何建议吗?

我当前使用的命令是:

File.Copy(this.txt_log_file_to_analyze.Text, sLogFileToAnalyze,true);

C# 复制正在写入的文件

我想你必须使用以下方法打开文件:

File.Open(this.txt_log_file_to_analyze.Text,FileMode.Open,FileAccess.Read,FileShare.ReadWrite)

然后"手动"复制文件的内容,即

using (var from = File.Open("path", FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
using (var to = File.OpenWrite("to_path"))
{
    from.CopyTo(to);
}

或者,如果 .NET 4.5 请参阅如何将一个流的内容复制到另一个流?

使用上述 api,您可以指定不希望以独占方式访问该文件。