Naik Nagraj Ответов: 2

Пространство в каталоге дает проблему в процессе работы.Начать


Привет,

Я написал следующий код для открытия приложения .net

String path;
 path=@"D:\test App\dec\dec.sln";
 Process.Start("devenv.exe", path);


У него есть проблема, потому что папка "тестовое приложение" содержит пространство.

Кто-нибудь знает какие-нибудь обходного пути..

Спасибо,
Награж

2 Ответов

Рейтинг:
18

JF2015

Привет,
попробуйте это решение, которое работает для меня:

string path = "\"D:\\test App\\dec.sln\"";
Process.Start("devenv.exe", path);


Espen Harlinn

Хорошо и просто, мой 5-й

Рейтинг:
10

Sergey Alexandrovich Kryukov

Я прошу прощения за неправильный ответ, который я опубликовал в первую очередь.

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

Тогда пробелы обычно не нужны, но проблема заключается в том, что приложение запускается в процессе запуска: команда разбирается на параметры командной строки, разделенные пробелами. Если какой-то параметр должен содержать пробелы внутри, он должен быть окружен кавычками, в противном случае он разбивается: анализируется как два или более параметров.

В этом примере "D:\test App\dec\dec.sln" был проанализирован как два параметра:
"D:\test" и "приложение\декабря\декабря.СЛН". Добавление цитаты make должно исправить это.

Правильное исправление показано в ответе J2015.

—СА


JF2015

Я не согласен. Эта ошибка связана с пробелами. ОП правильно использует процесс.Начало("devenv.exe", path), который запускает visual studio с решением, указанным в разделе "path". Его код отлично работает для меня, когда я использую путь без пробелов, и мое решение работает, даже если в пути есть пробелы.

Sergey Alexandrovich Kryukov

Нишант, ты прав, и твой голос "1" был правильным, я понял свою ошибку позже.
Я прошу прощения. Я поместил объяснение в обновление своего ответа.
--СА

JF2015

Я протестировал его с помощью VS2008, и это единственное решение, которое сработало для меня.

Sergey Alexandrovich Kryukov

Но я ошибся. Я исправил свой ответ: поставил подробное объяснение.
Извиняюсь.
--СА

Olivier Levrey

Это должен быть правильный ответ. Котировки для параметров не нужны. Я сделал быстрый тест, и он сработал.

Sergey Alexandrovich Kryukov

К сожалению, я ошибся. Пожалуйста, смотрите недатированный ответ для объяснения.
Спасибо.
--СА

Olivier Levrey

Я сделал тест с блокнотом и работал... тогда это, вероятно, означает, что блокнот принимает всю командную строку, а не только первый аргумент! Я должен был проверить с чем-то другим ;)

Sergey Alexandrovich Kryukov

Речь идет не о "принятии" аргумента, а о том, как приложение его анализирует.
Дополнительные символы кавычек являются частью отдельного аргумента команды, а не частью аргумента метода процесса, если хотите. Я был пойман на этой простой вещи.
--СА

ali rasoulzadeh

очень хорошее решение
string path = "\""+fileNameafter1+"\"";

Sergey Alexandrovich Kryukov

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

string path = string.Format(@"\{0}\", fileName);

—СА

ali rasoulzadeh

да, очень хорошо

Sergey Alexandrovich Kryukov

:-)