c# - 如果进程以编程方式运行(来自 C#),则“没有这样的文件或目录”

标签 c# linux hadoop process mono

我有一个将大量文件转储到目录的应用程序。我想使用 hadoop 命令将这些文件复制到 Hadoop 集群。我使用以下代码来运行命令。

System.Diagnostics.ProcessStartInfo export = new System.Diagnostics.ProcessStartInfo();
export.RedirectStandardOutput = false;
export.RedirectStandardError = false;
export.UseShellExecute = false;
export.WorkingDirectory = Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location);
export.FileName = "hadoop";
export.Arguments = "fs -copyFromLocal " + Path.Combine(dumpDirectory, "*.txt") + " " + hadoopPath));
Console.WriteLine("Copying data: hadoop " + export.Arguments);

System.Diagnostics.Process proc = System.Diagnostics.Process.Start(export);

proc.WaitForExit();
if (proc.ExitCode == 0)
{
    IEnumerable<string> files = Directory.EnumerateFiles(dumpDirectory);
    foreach (string file in files)
        File.Delete(file);
}
else
    Console.WriteLine("Error copying to Hadoop: " + proc.ExitCode);

程序写入以下消息:

Copying data: hadoop fs -copyFromLocal local/directory/*.txt /user/remote/directory/

copyFromLocal: `local/directory/*.txt': No such file or directory

Error copying to Hadoop: 1

有趣的是,当我手动运行命令时,文件复制没有错误。

此外,如果程序在不使用 *.txt 的情况下运行命令,而是分别为每个文件调用命令,则命令会成功。

任何人都可以阐明这一点吗?

最佳答案

我通过创建包含给定命令的 bash 脚本部分解决了这个问题。我以编程方式运行 bash 脚本并且它有效。

但是,我仍然不知道为什么原来的不起作用。

关于c# - 如果进程以编程方式运行(来自 C#),则“没有这样的文件或目录”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20993091/

相关文章:

c# - .Net 中 NameValueCollection 的通用形式

android - 无法从 ART 创建磁盘文件

java - 如何将一个进程的输出重定向为另一进程的输入?

hadoop - 我已经配置了hadoop完全分布式模式,它可以正常工作,但是现在重新启动后,我的namenode无法启动

scala - 在apache Spark中读取RDF

c# - ASP.NET MVC 2 - 如何从下拉列表中获取选定的值到我的 View 模型中?

c# - 向 ASP.NET Web 应用程序添加顶级异常处理

Linux - 无法执行二进制文件

java - 运行hadoop时出现Classnotfound异常

c# - 在使用 TFS SDK checkin 文件之前如何预测/获取下一个 ChangeSetId