Аргумент C # » вместо обратной косой черты

#c# #arguments

#c# #аргументы

Вопрос:

мой код

 a.exe

string programName = AppDomain.CurrentDomain.FriendlyName;
ProcessStartInfo proc = new ProcessStartInfo();
proc.FileName = "b.exe"
proc.Arguments = programName   " ""   AppDomain.CurrentDomain.BaseDirectory   """;
Process.Start(proc)
  

и проверьте значение другой программой

 b.exe

MessageBox.Show(args[0]);
MessageBox.Show(args[1]);
  

я предсказываю, что значение равно

 args[0] = a.exe
args[1] = D:my testwith spaceFolder
  

но значение равно

 args[0] = a.exe
args[1] = D:my testwith spaceFolder"
  

ВОПРОС

 BaseDirectory : C:my testwith spaceFolder
so i cover BaseDirectory with " because has space.
as a result i want
b.exe a.exe "C:my testwith spaceFolder"
but at b.exe check args[1] value is
D:my testwith spaceFolder"

where is my backslash and why appear "
  

помогите мне, пожалуйста…

Комментарии:

1. Установите точку останова в строке Process.Start(proc) и проверьте proc.Arguments . Кстати, разница между вашим прогнозом и фактическим значением заключается в том, что «T» в «моем тесте» в нижнем регистре в фактическом значении, и что вместо «» оно заканчивается на «. Похоже, это не соответствует названию вашего вопроса. Не могли бы вы выразиться немного яснее?

2. AppDomain.CurrentDomain.BaseDirectory Заканчивается обратной косой чертой? Если нет, то почему вы этого ожидаете?

3. Проблема только в том, что вы видите " вместо в конце аргументов[1]? Это происходит потому, что последняя часть вашего строкового построения, где вы устанавливаете proc. Аргументы — это добавление, """ которое является экранированным " . Если вы хотите добавить обратную косую черту к вашей строке, вам нужно вместо этого закодировать добавление экранированной обратной косой черты, например "\" .

4. @John мой вопрос " вместо обратной косой черты.

5. @insane_developer потому что BaseDirectory заканчивается обратной косой чертой

Ответ №1:

Как Kayndarr уже правильно указал в комментариях, вы экранируете " на своем пути.

Существуют определенные символы, которые компилятор не будет интерпретировать как часть строки из-за их особого значения.

Чтобы сообщить компилятору, что вы хотите, чтобы эти символы интерпретировались как часть строки вместо этого, вы должны записать их в так называемой «escape-последовательности».

Т.е. это означает размещение обратной косой черты перед ними.

Поскольку обратная косая черта сама по себе имеет для этого также особое значение как escape-символ — вам нужно экранировать косую черту, если вы хотите, чтобы она интерпретировалась как часть строки.

 "\"
  

Сгенерирует литеральную строку с одной обратной косой чертой в ней, поскольку первая обратная косая черта используется для экранирования второй.

Исправление в вашем примере для этого будет выглядеть следующим образом:

 string programName = AppDomain.CurrentDomain.FriendlyName;
ProcessStartInfo proc = new ProcessStartInfo();
proc.FileName = "b.exe"
proc.Arguments = programName   "\"   AppDomain.CurrentDomain.BaseDirectory   "\";
Process.Start(proc);