system() в С# без вызова cmd.exe

как перевести систему («») на С# без вызова cmd.exe? редактировать: мне нужно бросить что-то вроде "dir"


c cmd c#
person user302823    schedule 08.05.2010    source источник


Ответы (6)


Как уже отмечалось, это Process.Start. Пример:

using System.Diagnostics;

// ...

Process.Start(@"C:\myapp\foo.exe");
person John Feminella    schedule 08.05.2010
comment
Каким будет рабочий каталог, если вы вызовете Process.Start(@"C:\myapp\foo.exe"); как таковой? - person Pacerier; 02.04.2015

Если я правильно понял ваш вопрос, вы ищете Process.Start. .

См. этот пример (из документов):

// Opens urls and .html documents using Internet Explorer.
void OpenWithArguments()
{
    // url's are not considered documents. They can only be opened
    // by passing them as arguments.
    Process.Start("IExplore.exe", "www.northwindtraders.com");

    // Start a Web page using a browser associated with .html and .asp files.
    Process.Start("IExplore.exe", "C:\\myPath\\myFile.htm");
    Process.Start("IExplore.exe", "C:\\myPath\\myFile.asp");
 }

Изменить

Как вы сказали, вам нужно что-то вроде команды «dir», я бы посоветовал вам взглянуть на Информация о каталоге. Вы можете использовать его, чтобы создать свой собственный список каталогов. Например (также из документов):

// Create a DirectoryInfo of the directory of the files to enumerate.
DirectoryInfo DirInfo = new DirectoryInfo(@"\\archives1\library");

DateTime StartOf2009 = new DateTime(2009, 01, 01);

// LINQ query for all files created before 2009.
var files = from f in DirInfo.EnumerateFiles()
           where DirInfo.CreationTimeUtc < StartOf2009
           select f;

// Show results.
foreach (var f in files)
{
    Console.WriteLine("{0}", f.Name);
}
person Fernando    schedule 08.05.2010
comment
И вам следует избегать system() в первую очередь в вашем исходном приложении C. - person Matteo Italia; 08.05.2010
comment
dir был просто примером, который я хочу имитировать cmd.exe - person user302823; 08.05.2010
comment
Чего бы вы ни пытались добиться с помощью системы, почти наверняка есть более чистый способ сделать это прямо из C/C#. system — это функция, которую следует избегать. - person Matteo Italia; 09.05.2010

I need to throw something like "dir"

Если вам нужно запустить DIR, вам нужно вызвать cmd.exe, поскольку каталог является внутренним для cmd.exe.

person Joshua    schedule 08.05.2010

Не уверен, что понимаю ваш вопрос. Вы ищете Process.Start?

person nc3b    schedule 08.05.2010

Вам на самом деле нужен аналог? Вы можете не зависеть от того, что именно вы пытаетесь сделать.

Например, вызов copy из командной строки сам имеет эквивалент C#, File.Copy, для dir есть целый Directory класс для получения информации (это два быстрых примера из тысячи). В зависимости от того, что вам нужно, C#, скорее всего, имеет библиотеку/функцию для конкретной команды, которую вы пытаетесь запустить, обычно это более надежный метод, а не глобальный обработчик.

Если глобальный «вызов этого» — это то, что вам нужно, то, как предполагают другие ответы, используя System.Diagnostics.Process.

person Nick Craver    schedule 08.05.2010

Если вы хотите выполнить команду командной строки (cmd.exe), например «dir», «time» или «mkdir», передайте команду в качестве аргумента cmd.exe с флагом /C.

Например,

cmd.exe /C dir

or

cmd.exe /C mkdir "New Dir"
person Andreas Rejbrand    schedule 08.05.2010