如何在 C# 应用程序中使用命令、exe 获取目录中的文件数量

如何在 C# 应用程序中使用命令、exe 获取目录中的文件数量

我想使用 Process 类执行 command.exe 方法来返回父目录中的文件数。

它必须使用 command.exe(各种原因)。

这是我的代码:

    private static Int64 GetFileCount(string path)
    {
        Int64 ct = 0;
        Process process = new Process();
        process.StartInfo = new System.Diagnostics.ProcessStartInfo("cmd.exe");
        process.StartInfo.UseShellExecute = false;
        process.StartInfo.RedirectStandardOutput = true;
        process.StartInfo.RedirectStandardError = true;
        process.StartInfo.CreateNoWindow = true;
        process.StartInfo.Arguments = "dir \"" + path + "\" /s/a-d | find /c \".dat\"";
        process.StartInfo.WorkingDirectory = path;
        process.Start();
        string output = process.StandardOutput.ReadToEnd();
        if (output != "")
        {
            ct = Convert.ToInt64(output);
        }
        process.WaitForExit();
        return ct;
    }

路径变量是:

d:\Cloud\Catalogues\0\2015

我已经复制它并在 DOS 提示符下执行它并且它运行正常所以我知道 DOS 的东西是可以运行的。

这是我在 DOS/命令提示符中复制并运行的内容:

dir "d:\Cloud\Catalogues\0\2015" /s/a-d | find /c ".dat"

我已经在我的 C# 应用程序中使用了其他 DOS 命令并且一切运行良好。

结果始终是空字符串 {“”}。

我只是对这个‘查找’功能有疑问。

我知道我可以使用 bat 文件,但为了简单起见,我更愿意使用上面的文件。

我是否遗漏了什么?

答案1

编辑:实际问题似乎是您使用了错误的参数。当您想要执行在参数字符串中输入的命令时,请添加“/k”或“/c”。

旧的,可能仍然相关:假设你有非常好不使用System.IO命名空间以非黑客本机方式获取所需信息的原因是,我认为这是因为您尝试在没有ShellExecute的情况下运行,这意味着您必须提供您要执行的可执行文件的完整路径(在本例中为cmd.exe),因为该命令不是在shell中执行的,因此没有可用的环境变量来扩展cmd.exe的位置。

话虽如此,我还没有测试过,我使用的是 Linux,并且通常使用 Mono 进行开发。由于我的声誉不够,SuperUser 不会让我在没有完整答案的情况下发表我的意见,但我仍然觉得我应该发表我的意见。

相关内容