Как избежать пути, содержащего пробелы
чтобы передать путь с пробелами в консольное приложение .NET, вы должны избежать его. Вероятно, не избежать, но окружить двойными кавычками:
myapp.exe --path C:Program FilesMyApp`
становится
new string[] { "--path", "C:Program", "FilesMyApp" }
но
myapp.exe --path "C:Program FilesMyApp"
становится
new string[] { "--path", "C:Program FilesMyApp" }
и он отлично работает, и вы можете легко разобрать это.
Я хочу расширить набор параметров, заданных с добавлением одного и начать новый процесс с результирующим набором параметров:
new ProcessStartInfo(
Assembly.GetEntryAssembly().Location,
String.Join(" ", Enumerable.Concat(args, new[] { "--flag" })))
этот становится myapp.exe --path C:Program FilesMyApp --flag
где путь отбрасывает свой побег.
как обойти это с общим решением? (без поиска значения каждого параметра, требующего экранирования и цитирования вручную)
2 ответов
Я не думаю, что это возможно, так как пространство является разделителем для Аргументов CLI, поэтому их нужно было бы экранировать.
вы можете извлечь это в метод расширения довольно красиво, так что вы можете просто запустить args.Escape()
в вашем коде выше.
public static string[] Escape(this string[] args)
{
return args.Select(s => s.Contains(" ") ? string.Format("\"{0}\"", s) : s).ToArray();
}
просто укажите каждый параметр. Этот...
myapp.exe "--path" "C:\Program Files\MyApp" "--flag"
...вполне допустимо командной строки и делает именно то, что вы хотите.