【问题标题】:Network COPY Cmds within C# - File Not Found?C# 中的网络复制 Cmds - 找不到文件?
【发布时间】:2011-07-18 07:22:15
【问题描述】:

我正在尝试将文件复制到映射驱动器上的网络文件夹。我在我的命令行中测试了 COPY,它有效,所以我想我会尝试在 C# 中自动化这个过程。

ProcessStartInfo PInfo;
Process P;
PInfo = new ProcessStartInfo("COPY \"" + "c:\\test\\test.txt" + "\" \"" + "w:\\test\\what.txt" + "\"", @"/Z");
PInfo.CreateNoWindow = false; //nowindow
PInfo.UseShellExecute = true; //use shell
P = Process.Start(PInfo);
P.WaitForExit(5000); //give it some time to finish
P.Close();

引发异常:System.ComponentModel.Win32Exception (0x80004005):系统找不到指定的文件

我错过了什么?我是否必须在命令参数中添加任何其他内容?

我尝试过 File.Copy,但它似乎不起作用 (File.Exists("<mappeddriveletter>:\\folder\\file.txt");) 出现错误。

【问题讨论】:

  • File.Exists("\\server\file.txt") 当然,那将返回 false。您需要转义反斜杠,或使用@-string:File.Exists(@"\\server\file.txt")

标签: c# networking command-line batch-file copy


【解决方案1】:

此 SO 帖子包含一个示例

Run Command Prompt Commands

如何正确地做。您需要使用/c copy 作为参数调用cmd.exe

【讨论】:

    【解决方案2】:

    好吧,从技术角度来说:copy 本身不是可执行文件,而仅仅是cmd 解释的命令。所以基本上,您必须将cmd.exe 作为一个进程启动,并传递一个标志,使其运行copy 命令(您还必须将其作为参数提供)。

    无论如何,我会支持 Promit 并建议研究 File.Copy 或类似的东西。

    e:啊,当我发布此内容时,错过了您对 Promit 答案的评论。

    【讨论】:

    • 啊,是的,这是有道理的,因为进程试图找到程序“COPY blah blah blah”而不是“cmd.exe”,所以它显然会返回未找到的文件,我只是没有t 将其解释为 C# 未找到程序而不是要复制的文件。
    【解决方案3】:

    使用File.Copy会不会容易很多?

    【讨论】:

    • 我应该在我的问题中澄清 - File.Copy 似乎无法在网络共享上工作......或者至少,我无法让它工作。
    • 如果我们使用驱动器的共享映射,我们已经看到 File.Copy 存在一些不一致的行为,因此我们使用完全限定的网络名称,这可能更适合您。应该类似于 \\sharedServer.company.internal\destination
    猜你喜欢
    • 2020-07-21
    • 2019-03-02
    • 2018-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多