Вызов командной строки в папке

229
28 мая 2018, 10:10

Имеется следующий код:

string command = string.Empty;
DirectoryInfo dInfoForTesting = new DirectoryInfo(@"E:\TestFiles");
FileInfo[] files = dInfoForTesting.GetFiles();
Random rnd = new Random();
ProcessStartInfo startInfo = new ProcessStartInfo
{
    WorkingDirectory = @"E:\TestFiles",
    FileName = "cmd.exe",
    UseShellExecute = false,
    RedirectStandardInput = false
};
foreach (FileInfo file in files)
{
    string rndPswd = "134";
    command = "arj a -m1 -g" + rndPswd + " " + file.Name + ".arj " + file.Name;
    startInfo.Arguments = command;
    Process.Start(startInfo);
}

Собственно, задача состоит в том, чтобы вызывать архиватор ARJ в нужной папке через командную строку, передавать ему соответствующую команду (command) и создавать таким образом защищённый паролем архив (путь к данному архиватору уже прописан в переменной PATH, так что можно спокойной обращаться к нему через команду arj). Сама команда выглядит следующим образом:

arj a -m1 -g134 10.arj 10

где a - это создание архива -m1 - режим архивации -g134 - защитить архив паролем 134 10.arj - название архива 10 - файл, который будет заархивирован

Проблема состоит в том, что если просто в папке E:\TestFiles вызвать командную строку и в ней написать данную команду для того же файла с именем 10, то создастся архив. Но если запустить мой код, то ничего не произойдёт. Помогите разобраться, в чём проблема.

Answer 1

Вдруг кому поможет

Необходимо добавить в строку command либо /c, либо /k, где

/c - cmd выполняет команду и завершает работу
/k - то же самое, но продолжает работу

command = "/c arj a -m1 -g" + rndPswd + " " + file.Name + ".arj " + file.Name;

Answer 2

Вам не нужно вызывать командную строку, вам нужно вызвать в этой папке сам arj.exe:

ProcessStartInfo startInfo = new ProcessStartInfo
{
    WorkingDirectory = @"E:\TestFiles",
    FileName = "arj.exe", // или просто arj
    UseShellExecute = false,
    RedirectStandardInput = false
};
foreach (FileInfo file in files)
{
    string rndPswd = "134";
    command = "a -m1 -g" + rndPswd + " " + file.Name + ".arj " + file.Name;
    startInfo.Arguments = command;
    Process.Start(startInfo);
}
READ ALSO
Как получить ConnectionString из DbContext'а EF Core?

Как получить ConnectionString из DbContext'а EF Core?

Это краткий перевод вопроса How to get ConnectionString from EF7 DbContext

286
Делегирование свойств в C#

Делегирование свойств в C#

Допустим, есть класс с неким свойством:

256
Как создавать объект по нажатию кнопки

Как создавать объект по нажатию кнопки

Как заставить прописанный мной объект для игры, создаваться только после нажатие игроком на кнопку 'Играть'Я не смог разобраться в instance, а opacity...

222
почему у меня выходит stackoverflow exception

почему у меня выходит stackoverflow exception

почему у меня выходит Stackoverflow exception, при попытке применения метода RotateLeft() для экземпляра класса BinarySearchTree А? Проблема именно в этом методе,...

195