【问题标题】:C# File.Copy from remote computer to localC# File.Copy 从远程计算机到本地
【发布时间】:2016-04-07 08:19:16
【问题描述】:

当我尝试将现有文件从远程计算机复制到本地时

File.Copy(
string.Format(@"\\{0}\e$\{1}", computerName, fileName), 
string.Format(@"{0}\{1}\{2}", localPath, computerName, fileName), 
true);

我得到了异常Could not find part of the path "\\computername\e$\filename"。我检查了路径,它是正确的。

我不认为这是一个权限问题,因为我可以使用Directory.GetFiles 访问文件,并且我可以使用FileInfo 获取文件大小或上次写入日期等信息,此外,当我使用 cmd 从 cmd 执行 xcopy 命令时他成功复制文件的代码中的相同路径。

谁能帮我理解我做错了什么或其他复制文件的方法?

【问题讨论】:

  • 您是以用户身份运行该文件副本,还是从网页、服务运行?
  • @BugFinder 我在 c# 控制台项目中运行文件复制,所以作为用户。
  • 你可以尝试使用“net use”。连接驱动后,即可复制文件。
  • 好的,但是,你有 \\computername +e$ +filename 和 localpath +computername +file .. 你确定文件存在于远程服务器上吗?你能浏览到 \computername\e$ - 在远程服务器的 e$ 上显示一个示例文件名和文件列表..
  • 使用Path.Combine 构建您的路径,以确保您的路径创建正确。

标签: c# copy remote-access


【解决方案1】:

使用普通的 File.Copy 无法从远程位置复制或复制到远程位置,因为文件是保存在本地 HDD 上还是您的网络可以访问它们会有所不同。其他社区成员已经制定了一些解决方案。最简单的可能是这样的:

How to provide user name and password when connecting to a network share

在此线程中提供了另一种解决方案:

Copying a file to a network share i dont have access to

您需要找出最适合您的。重要的是要提到,如果您跳过模拟,您的程序可能无法从任何地方和所有人运行。这可能会阻止用户无故障工作。

【讨论】:

  • 实际上正常的 file.copy 确实适用于 unc - 我刚刚做到了。
  • 我把它全部拿回来了 :) 我记得我曾经必须做同样的事情并且没有那些专门的方法就无法让它工作。但是,如果有可能实现更容易,那为什么不坚持下去呢。
  • 我认为有时它可能不起作用 - 例如,如果您没有去过那个 UNC,那么您可能没有验证您的连接并且它可能会导致复制失败,但是,只要您的 PC 和远程服务器之前已经讨论过这个,它会起作用..但是,我认为OP的问题更简单。
【解决方案2】:

我发现File.Copyxcopy 命令不同,如果它不存在,它不会创建给定的目标文件夹。这让我很困惑,因为我认为如果 cmd 命令创建目录,Copy 方法也可以管理这种情况。此外,异常消息指出源路径错误而不是目标路径。

所以解决问题:

localPath = Path.Combine(localPath, computerName);
if (!Directory.Exists(localPath))
{
    Directory.CreateDirectory(localPath);
}
File.Copy(
string.Format(@"\\{0}\e$\{1}", computerName, fileName), 
Path.Combine(localPath, fileName), 
true);

我为我不太好的英语和分心而道歉。

感谢您的帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-06-09
    • 1970-01-01
    • 2010-11-26
    • 2012-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-05
    相关资源
    最近更新 更多