如何复制正在使用的文件

本文关键字:文件 何复制 复制 | 更新日期: 2023-09-27 18:04:15

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

我使用这个库http://ftplib.codeplex.com/在服务器上打开ftp会话并发送文件。这里涉及到一些重命名,但仅此而已。

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

所以我正在寻找一种方法来复制日志,然后上传它。最好的方法是什么?

如何复制正在使用的文件

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

如果你首先拥有访问文件的代码,你想用一个显式的ShareMode打开它

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