从UNC路径复制执行文件
本文关键字:执行 文件 复制 路径 UNC | 更新日期: 2023-09-27 18:14:21
我正在编写一个应用程序,需要从当前正在执行的网络目录复制文件。
我试着用
打开文件using (var source = new FileStream(fileData.FileName,
FileMode.Open,
FileAccess.Read,
FileShare.ReadWrite))
打开文件流后,我创建了另一个要复制到的流。
但是,这会抛出一个异常,表示该文件正在被另一个进程使用。我不知道如何解决这个问题。如果我使用文件资源管理器,它会很好地复制文件。所以我知道这是可能的,只是不确定怎么做。
编辑:我也尝试过简单的File.Copy(source, destination)
,我得到同样的异常,说文件正在被另一个进程使用。
要复制正在被另一个进程使用的文件,我们必须使用Windows中的两个服务,并且您需要验证这些服务未被禁用:
- 卷影拷贝
- Microsoft Software Shadow Copy Provider
它们可以保留为手动启动,因此它们不需要一直运行。
为此,我们可以使用任何第三方工具。Hobocopy就是其中之一。它将在需要时自动启动这两个服务,并且在完成后将关闭卷影复制服务。
下载链接:https://github.com/candera/hobocopy/downloads
解压缩文件并将其放入项目的Lib目录中。然后使用System.Diagnostics.Process调用该进程。在您的情况下,只需使用以下开关作为参数:/y(不提示,只是复制所有内容)
命令行语法
hobocopy [/statefile=FILE] [/verbosity=LEVEL] [ /full | /incremental ]
[ /clear ] [ /skipdenied ] [ /y ] [ /simulate ] [/recursive]
src dest [file [file [ ... ] ]
c#代码:Process process = new Process();
process.StartInfo.UseShellExecute = false;
process.StartInfo.CreateNoWindow = true;
process.StartInfo.FileName = @"Lib'hobocopy.exe";
process.StartInfo.Arguments = @" /y <network-directory> <local-directory> <filename>";
process.Start();
这将复制任何正在使用或未使用的文件(hobocopy主要关注有效地复制目录)到您的目标。