#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);