Команда CMD Copy не выполняется должным образом через C # - PullRequest
0 голосов
/ 25 октября 2019

У меня есть программа, в которой вы можете выбрать исходную папку и папку с описанием. Вы также можете выбрать тип файла, например: manual * .pdf.

Эта программа должна скопировать файлы из исходной папки в папку назначения.

Создает команду для cmd,Он открывает CDM и запускает команду, но останавливается после нескольких скопированных файлов. Если я запускаю команду вручную, она отлично работает.

Я не знаю, в чем проблема.

txtKopierBefehl.Text = "FOR /F \"delims=#\" %i IN ('dir /ad /b /s " +
        txtQuelle.Text + "') DO @copy \"%i\\" + txtDateiKriterien.Text +
        "\" " + txtZiel.Text + " /y";

cmd.StartInfo.FileName = "cmd.exe";
cmd.StartInfo.RedirectStandardInput = true;
cmd.StartInfo.RedirectStandardOutput = true;
cmd.StartInfo.CreateNoWindow = true;
cmd.StartInfo.UseShellExecute = false;
cmd.Start();

cmd.StandardInput.WriteLine(txtKopierBefehl.Text);
cmd.StandardInput.Flush();
cmd.StandardInput.Close();
cmd.WaitForExit();
Console.WriteLine(cmd.StandardOutput.ReadToEnd());

1 Ответ

0 голосов
/ 25 октября 2019

Я не уверен на 100% в этом, но вот мои мысли:

Вы делаете cmd.WaitForExit (), хотя также включен RedirectStandardOutput, что означает, что любой вывод в CMD будетзаписано в поток StandardOutput.

Поскольку вы ожидаете завершения процесса, прежде чем когда-либо читаете StandardOuput, я предполагаю, что поток заполняется, и в конечном итоге процесс останавливается, пока поток не освободится снова.

Таким образом, вам, вероятно, придется просто переключить две последние строки, сначала выполнить StandardOutput.ReadToEnd, а затем WaitForExit.

В противном случае, для уточнения комментария от BugFinder, используйте функциональность из System.IO в копирование файлов .

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