C # Как использовать белые пробелы каталога в process.arguements? - PullRequest
7 голосов
/ 14 декабря 2010

Созданная программа использует сторонний инструмент для создания файла журнала.

Однако для аргументов, предоставленных для инструмента, требуются различные файлы из местоположений Каталога как часть создания журналов. Поэтому основной аргумент @"-r C:\test\ftk\ntuser.dat -d C:\System Volume Information\" + restoreFolder.Name + " -p runmru"; будет использоваться для создания журналов.

Может кто-нибудь посоветовать, как сделать так, чтобы аргументы "C: \ System Volume Information \" обрабатывались системой с помещенными пробелами? Спасибо!

Коды:

            Process process = new Process();
            process.StartInfo.FileName = @"C:\test\ftk\ripxp\ripxp.exe";
            process.StartInfo.Arguments = @"-r C:\test\ftk\ntuser.dat -d C:\System Volume Information\" + restoreFolder.Name + " -p runmru";
            process.StartInfo.CreateNoWindow = false;
            process.StartInfo.UseShellExecute = false;
            process.StartInfo.RedirectStandardOutput = true;
            process.StartInfo.RedirectStandardInput = true;
            process.StartInfo.RedirectStandardError = true;
            process.Start();

Ответы [ 5 ]

10 голосов
/ 14 декабря 2010

Вам необходимо выйти из ", добавив к ним \ (\") - для обычных строк или удвоив их ("") для дословных строковых литералов (тех, которые начинаются с @):

process.StartInfo.Arguments = @"-r C:\test\ftk\ntuser.dat -d ""C:\System Volume Information\" + restoreFolder.Name + @""" -p runmru";
2 голосов
/ 14 декабря 2010

Оберните этот путь в двойные кавычки:

process.StartInfo.Arguments = @"-r C:\test\ftk\ntuser.dat -d ""C:\System Volume Information\" + restoreFolder.Name + @""" -p runmru";
1 голос
/ 14 декабря 2010

Возможно

process.StartInfo.Arguments = @"-r C:\test\ftk\ntuser.dat -d C:\System Volume Information\" + restoreFolder.Name + " -p runmru";

должно быть

process.StartInfo.Arguments = @"-r ""C:\test\ftk\ntuser.dat"" -d ""C:\System Volume Information\""" + restoreFolder.Name + " -p runmru";
0 голосов
/ 14 декабря 2010

Вам действительно нужно использовать строку. Формат вместе с классом Path:

process.StartInfo.Arguments = @"-r C:\test\ftk\ntuser.dat -d C:\System Volume Information\" + restoreFolder.Name + " -p runmru"

можно переписать так, чтобы он был намного чище следующим образом:

string ntuser = @"C:\test\ftk\ntuser.dat";
var args = Path.Combine(@"C:\System Volume Information\", "restoreFolder.Name");

var outs = string.Format("-r {0} -d {1} -p runmru", ntuser, args);
outs.Dump();
0 голосов
/ 14 декабря 2010

Если я правильно понял вопрос, вы можете заключить имя в кавычки:

"... \"C:\System Volume Information\" + restoreFolder.Name + "\"..."
...