Вопрос. Учитывая имя файла и произвольный список строк, существует ли канонический способ создания единой командной строки, так что Environment.GetCommandLineArgs (и С# void main(String[] args)
/VB Sub Main(args() As String)
) вернет тот же список строк?
Фон: способ, которым .NET разбивает командную строку на аргументы, удивительно сложный, например:
Если знак двойной кавычки следует за двумя или четным числом обратных косых черт, каждая последующая обратная косая черта заменяется одной обратной косой чертой, а знак двойной кавычки удаляется. Если знак двойной кавычки следует за нечетным числом обратных косых черт, включая только одну, каждая предыдущая пара заменяется одной обратной косой чертой, а оставшаяся обратная косая черта удаляется; однако в этом случае знак двойной кавычки не удаляется.
Многие пробовали простой "поместить каждый аргумент в двойные кавычки и избежать существующих двойных кавычек" и сбой, как только один из аргументов содержит обратную косую черту. В этой статье возникли различные вопросы по StackOverflow, например:
- Как избежать путей, содержащих пробелы
- Пропустить аргументы командной строки в С#
- Исключить строку для Process.Start
- Передача аргументов командной строки на С#
- исходя из авторитетного источника (возможно, запись в блоге от одного из разработчиков, участвующих в этом сумасшедшем соглашении с командной строкой) или
- обеспечивает формальное доказательство того, что данный алгоритм удовлетворяет требованиям командной строки .NET.