C#复制正在写入的文件

时间:2013-09-26 08:42:46

标签: c# copy

我已经阅读了很多关于这个主题的帖子,但似乎都没有直接解决我的问题(这让我感到惊讶)。

无论如何......我写了一个日志解析器,非常简单,我想在解析之前从本地复制远程机器上的文件。我正在尝试复制的文件正在不断写入,我在复制它时“随机”成功。有时它会工作,有时我会得到'访问被拒绝'或FileAccess错误。其他几点:

  • 每当我使用Windows资源管理器在本地复制文件时,我都不会 复制它有问题(这让我相信它是完美的 可以100%的时间复制文件。
  • 我总是可以在删除位置使用文本编辑器打开文件。
  • 我不拥有正在写入的文件,也不希望以任何方式“锁定”它,以致实际写入此文件的应用程序失败。

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

我正在使用的当前命令是:

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

1 个答案:

答案 0 :(得分:7)

我猜您必须使用以下方式打开文件:

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看到How do I copy the contents of one stream to another?

使用上面的api,您可以指定您不希望对该文件进行独占访问。