объединение содержимого каталога с помощью оболочки cmd - PullRequest
3 голосов
/ 07 февраля 2012

Я хочу объединить все файлы в одном каталоге.Однако я пробовал несколько версий, но ни одна из них не работает.Я получаю сообщение о том, что файл не найден.Вот что я пытался:

        String outputFile = this.outputTxt.Text;
        String inputFolder = this.inputTxt.Text;
        String files = "";
        String command;
        foreach (String f in Directory.GetFiles(inputFolder))
        {
            files += f+"+";
        }
        files = files.Substring(0, files.Length - 1);
        command = files + " " + outputFile;

        Process.Start("copy",command);

пример того, что я хочу получить: скопировать a.txt + b.txt + c.txt + d.txt output.txt

Ия получаю сообщение об ошибке:

Произошло необработанное исключение типа 'System.ComponentModel.Win32Exception' в System.dll

Дополнительная информация: Система не может найти указанный файл

Ответы [ 3 ]

5 голосов
/ 07 февраля 2012

Попробуйте запустить cmd, а не "запускать" с процессом.

Process.Start("cmd", "copy " + command);

copy - это команда в командной строке с псевдонимом ... что-то, а не сам файл, который Windows умеет запускать (вне командной строки).

Существуют свойства класса Process, которые вы можете использовать для подавления всплывающего окна, если оно не нужно отображать на экране во время работы программы.

4 голосов
/ 07 февраля 2012

Если вы не используете command вместо files в качестве второго параметра для Process.Start?

Process.Start("copy", command);

UPDATE:

Хорошо, это была опечатка. Как насчет вашего inputFolder текста? Использует ли он двойную обратную косую черту для каталогов (избегая обратной косой черты)? Как и во всех \ символов должно быть \\.

2 голосов
/ 07 февраля 2012

Вам нужно вызвать cmd.exe с командой copy и вашими аргументами (как упоминалось @Servy). Вот очищенная версия вашего кода, чтобы сделать то, что вам нужно:

    String outputFile = this.outputTxt.Text;
    String inputFolder = this.inputTxt.Text;
    StringBuilder files = new StringBuilder();
    foreach (String f in Directory.EnumerateFiles(inputFolder))
    {
        files.Append(f).Append("+");
    }
    files = files.Remove(file.Length-1, 1); // Remove trailing plus
    files.Append(" ").Append(outputFile);      

    using (var proc = Process.Start("cmd.exe", "/C copy " + files.ToString()))
    {
        proc.WaitForExit();
    }

Вам необходимо избавиться от Process (то есть оператора using), и поскольку вы объединяете много строк (в любом случае потенциально много строк), вы должны использовать StringBuilder.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...