如何复制正在使用的文件

时间:2011-08-01 16:38:13

标签: c# file-upload ftp

我想让我的用户能够将日志文件发布到我的服务器上,而不是要求他们找到它并通过电子邮件发送给我。

我正在使用此库http://ftplib.codeplex.com/在服务器上打开ftp会话并发送文件。有一些重命名,但就是这样。

不幸的是,要发送的日志文件实际上是打开的,所以我得到了“另一个进程正在使用的文件”异常。当我在我的应用程序运行时打开日志时,我想到这一点是有道理的。我关闭它,但当然,上传是一个漫长的过程。我将上传代码放入后台线程,以便用户可以继续。但是,在上载完成之前,无法重新打开日志。与此同时,可能会有一些事件应该写入日志。

所以我正在寻找一种复制日志然后上传它的方法。最好的方法是什么?该日志是一个二进制文件BTW。

1 个答案:

答案 0 :(得分:3)

如果您不拥有打开日志文件的代码(即,它是另一个应用程序或封闭的源代码dll),您可以尝试执行File.Copy(<log>, <tempdest>)并发送该文件,并在删除时删除它重做。只有当您没有对文件的读访问权时,这有时才有效。

如果您拥有首先访问该文件的代码,则需要使用显式ShareMode打开它,即

 File.Open(path, FileMode.Open, FileAccess.ReadWrite, FileShare.Read)