wgha168 Ответов: 1

Как перенаправить вывод из командной строки в richtextbox ?


Можно ли выполнить следующие шаги ниже с помощью C# 2008:

1. Откройте и спрячьте командную строку
2. Использование текстового поля C# для отправки команды ("c:\") в скрытую командную строку
3. Вывод из командной строки в richtextbox с
4. отправьте другую команду ("dir") в командную строку
5. Вывод из командной строки для управления richtextbox, но добавляет к нему.
6. отправьте другую команду ("cd \windows") в командную строку
7. Вывод из командной строки для управления richtextbox, но добавляет к нему.
8. и так далее...пока я не решил бросить курить

Если все это можно сделать...пожалуйста, предоставьте пример кода. Спасибо.

1 Ответов

Рейтинг:
7

Sergey Alexandrovich Kryukov

Все это возможно, только не имеет смысла с упомянутым набором команд, потому что гораздо проще получить эффект, если эти команды сразу же из Windows API используют типы и методы из пространства имен System.IO.

Во всяком случае, с помощью командного интерпретатора CMD.EXE программно это вполне возможно благодаря использованию класса System.Diagnostics.Process пожалуйста , смотрите:
http://msdn.microsoft.com/en-us/library/system.diagnostics.process.aspx[^].

Хитрость заключается в использовании перенаправления потоков StandardInput и StandardOutput (и, если требуется, также StandardError). Течение StandardInput используется для подачи команды в интерпретатор команд, а также в поток StandardOutput — для сбора выходного текста.

Пример кода с перенаправленным вводом смотрите здесь:
http://msdn.microsoft.com/en-us/library/system.diagnostics.process.standardinput.aspx[^].

Для примера кода с перенаправленным выводом — здесь:
http://msdn.microsoft.com/en-us/library/system.diagnostics.process.standardoutput.aspx[^].

Объединения этих примеров кода было бы вполне достаточно для реализации нужной вам функциональности. Я хочу повторить, что это не имеет большого смысла: реализация требуемой функциональности на уровне OP API гораздо более естественна и проста.

—СА


Dean Oliver

милый. +5

Sergey Alexandrovich Kryukov

Спасибо, Дин.
--СА

wgha168

Спасибо за ссылки, но, к сожалению, я новичок в C#, так что мне еще многое предстоит узнать. Я не знаю, как их объединить, чтобы заставить это работать.

Можете ли вы предоставить мне образец, который вы упоминаете в самом верхнем комментарии?

"Все это возможно, только не имеет смысла с набором упомянутых команд, потому что гораздо проще получить эффект, если эти команды сразу же из Windows API используют типы и методы из пространства имен System.IO."

Sergey Alexandrovich Kryukov

Если вы новичок, я предлагаю вам начать. Что говорит вам, что вы не можете объединить образцы? А вы пробовали? Вам нужно только понять каждую строчку. Пожалуйста, не стесняйтесь задавать дополнительные вопросы, если вы этого не сделаете.

Что касается системы.ИО, вот что я имел в виду, было довольно тривиально:

1) получение файлов в каталоге, как с помощью команды "dir": System.IO.Directory.GetFiles и System.IO.Directory.GetDirectories, также System.IO.Directory.GetFileSystemEntries.
Видеть:
http://msdn.microsoft.com/en-us/library/system.io.directory.aspx

2) Установка текущего (рабочего) каталога, как в команде "cd" :
System.IO.Directory.SetCurrentDirectory, см.:
http://msdn.microsoft.com/en-us/library/system.io.directory.setcurrentdirectory.aspx

И все такое прочее. Использовать Системы.ИО.Путь, Системой.ИО.Directoryinfoкласс, Системы.ИО.FileInfo может, и т. д.
Видеть:
http://msdn.microsoft.com/en-us/library/29kt2zfk.aspx

Теперь все ясно?
--СА

TECNO14

как получить эффект, если эти команды сразу же из Windows API ?