Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 复制正在写入的文件_C#_Copy - Fatal编程技术网

C# 复制正在写入的文件

C# 复制正在写入的文件,c#,copy,C#,Copy,我已经读过很多关于这个话题的帖子,但是没有一篇能够直接解决我的问题(这让我感到惊讶) 不管怎样……我编写了一个日志解析器,非常简单地说,我希望在解析文件之前从远程机器本地复制一个文件。我试图复制的文件经常被写入,我在复制它时“随机”成功。有时它会工作,但有时我会收到“访问被拒绝”或文件访问错误。其他几点: 每当我使用windows资源管理器在本地复制文件时,我从不 复制它时遇到问题(这使我相信它是完美的 可以100%复制文件) 我总是可以在文件的删除位置使用文本编辑器打开文件 我不拥有正在写入

我已经读过很多关于这个话题的帖子,但是没有一篇能够直接解决我的问题(这让我感到惊讶)

不管怎样……我编写了一个日志解析器,非常简单地说,我希望在解析文件之前从远程机器本地复制一个文件。我试图复制的文件经常被写入,我在复制它时“随机”成功。有时它会工作,但有时我会收到“访问被拒绝”或文件访问错误。其他几点:

  • 每当我使用windows资源管理器在本地复制文件时,我从不
    复制它时遇到问题(这使我相信它是完美的
    可以100%复制文件)
  • 我总是可以在文件的删除位置使用文本编辑器打开文件
  • 我不拥有正在写入的文件,也不希望以任何方式“锁定”该文件,从而导致实际写入该文件的应用程序失败
有人对如何复制这个文件有什么建议吗

我当前使用的命令是:

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

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

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);
}
或者如果.NET4.5看到


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

此.txt_log_file_to_analyze.Text值的调试示例将帮助我们了解您如何远程访问此计算机(操作系统映射驱动器、FTP等)。您是否尝试过
新建FileStream(filepath,FileMode.Open,FileAccess.Read,FileShare.Read)
这样您就可以确保只在“Read”中打开它模式?您可以将其写入内存流或保存到文件中等。文件大小如何?它是否非常大?事实上,我认为您不必复制文件,如果文件所有者以足够的共享选项打开它,以便在所有者写入时读取它(在您的情况下,因为您说这是可能的),则您只能以读取模式打开文件并处理您读取的内容。我使用的是UNC\\\。这正是我要说的。很好!!!。两个问题。如果在我运行这些语句时远程文件继续被写入,会发生什么情况?命令是否会完成?如果文件在本地存在,我是否可以覆盖?命令是否会完成?I不知道-以前从未尝试过此操作。是否覆盖到文件?使用当前的file.OpenWrite,它将打开一个现有文件,不确定是否将附加或覆盖,但使用file.open for'to'您可以再次拥有更多的控制权。我尝试了此操作,结果如下:当文件被编辑时。open停止复制过程。我无法因为我的用户不在.NET 4.5上,所以请使用Stream.CopyTo。还有其他建议吗?下面是我为测试这一点所做的工作(我现在还不想接触我的生产文件)。我使用notepad++(75MB)打开了一个文件在“File.Open”部分中,我编辑并保存了文件。也就是在复制停止时,我将FileShare.ReadWrite切换为FileShare.Read,在复制过程中,我无法编辑文件(我假设这意味着在复制文件时应用程序将无法写入)。