Использование команды CMD в C # winforms - PullRequest
1 голос
/ 06 января 2012

Я хочу использовать команду CMD в c # winforms для создания папки в DIR с заданным путем к каталогу,

, например

"C: \ temp> MD MyFolder"

Интересно, как я могу выполнить это, используя платформу c # win. Я попытался взглянуть на Google, но ничего не смог найти, и это хорошая практика, чтобы использовать его, единственная причина, по которой я хочу его использовать, потому что мой путь к каталогу слишком длинный для Directory.CreateDirectory() метода.

Я выяснил, что CMD имеет те же ограничения, что и метод "CreateDirectory" в C #. Спасибо за ваш комментарий и ответы людей.

Ответы [ 6 ]

3 голосов
/ 06 января 2012

Все эти ответы о Process.Start замечательны, но я боюсь, что мы имеем дело с еще одним случаем ОР, который просит нас помочь им реализовать решение, которое, по их мнению, собирается сделать, чтоони пытаются достичь вместо того, чтобы спрашивать нас, как достичь того, чего они действительно пытаются достичь.

К счастью, ОП включила достаточно информации, чтобы мы могли угадать, чего они пытаются достичь, и дать им ответ, который на самом деле может быть полезен для них.

Итак:

  • Моя самая первая рекомендация - исправить путь к каталогу, чтобы он не был слишком длинным для метода Directory.CreateDirectory(), потому что это безумие и рано или поздно оно вызовет проблемы, которыеВы будете горько сожалеть о.

  • Если вы настаиваете на создании своего каталога где-нибудь близко к корню, используйте очень хороший метод System.IO.Path.Combine(), чтобы построить полный путь к вашему каталогу, так что вы можете вызвать Directory.CreateDirectory(), вместо того, чтобы пытаться создать его из текущего каталога, в котором работает ваше приложение, или придумывать причудливые идеи о запуске командного процессора для создания вашего каталога для вас.

Также, пожалуйста, забудьте о DOS.Эти команды назывались console commands в течение последних 18 лет, начиная с выпуска Windows NT 3.1 в 1993 году.

2 голосов
/ 06 января 2012

Чтобы преодолеть ограничение в 256 символов, я однажды написал крошечную библиотеку для .NET .

По сути, эта библиотека содержит несколько оболочек P / Invoke для базовых функций Win32, которые автоматически добавляют суффикс \\?\ для указания пути длиннее MAX_PATH.

1 голос
/ 13 июля 2016

Чтобы сделать процесс командной строки, используйте его:

var process = new Process
{
    StartInfo = new ProcessStartInfo
    {
        FileName = "cmd.exe",
        UseShellExecute = false,
        RedirectStandardInput = true,
        RedirectStandardOutput = true,
        RedirectStandardError = true
    }
};

Теперь для обработки данных используйте это:

// For output data directly from command line.
process.OutputDataReceived += outputReceivedHandler;
process.BeginOutputReadLine();

// For error output directly from command line.
process.ErrorDataReceived += errorReceivedHandler;
process.BeginErrorReadLine();

// For providing an command to command line.
var command = "ping www.google.pl";
var writer = process.StandardInput;
writer.WriteLine(command);

process.WaitForExit();
process.Close();

И наконец метод прослушивания для вывода:

public void outputReceivedHandler(object sender, DataReceivedEventArgs e)
{
    if (e.Data != null || !string.IsNullOrEmpty(e.Data))
        Console.WriteLine(e.Data);
}

Конечно, это то же самое для обработки ошибок.Надеюсь, это может кому-нибудь помочь.Я много искал и не нашел ответа, только некоторые указания, как это сделать, теперь я могу помочь другим людям, у которых есть такая же проблема.Извините, если мой язык не так хорош.

0 голосов
/ 06 января 2012

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

ProcessStartInfo cmd = new ProcessStartInfo("cmd.exe"); 
cmd.RedirectStandardInput = true; 
cmd.RedirectStandardOutput = true; 
cmd.RedirectStandardError = true; 
cmd.UseShellExecute = false; 
cmd.CreateNoWindow = true; 
cmd.WindowStyle = ProcessWindowStyle.Hidden; 
Process console = Process.Start(cmd); 
console.StandardInput.WriteLine("md MyFolder");

Надеюсь, это поможет!

0 голосов
/ 06 января 2012
System.Diagnostics.Process.Start("cmd.exe", "/c MD C:\\YourFolder");

кстати.Я действительно не понимаю, что вы подразумеваете под "Directory.CreateDirectory не работает".

0 голосов
/ 06 января 2012

Вы можете использовать Process.Start для выполнения внешнего исполняемого файла. В случае встроенных команд вам необходимо убедиться, что вы запускаете его с исполняемым файлом cmd.exe (передавая параметры с флагом /c).

Обратите внимание, что с помощью этого метода нельзя преодолеть ограничение ОС.

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