2013-07-24 2 views
4

Я пытаюсь передать путь к файлу в C# Console Application, но у меня возникают проблемы с неправильной строкой к моменту достижения консольного приложения.Передача пути к файлу в Main (string [] args) не работает

Если я запускаю мое приложение из командной строки с параметром пути к файлу:

MyApp "C:\Users\DevDave\Documents\Visual Studio 2012\Projects\MyProject\" 

Диалог окна выскакивает и сообщает мне, что мое приложение перестало работать, и когда я нажимаю опцию отладки, Я могу видеть, что результат args[0] является:

C:. \ Users \ DevDave \ Documents \ Visual Studio 2012 \ Projects \ MyProject»

Примечания есть еще замыкающие цитаты в конце

Если я прохожу второй аргумент:

MyApp "C:\Users\DevDave\Documents\Visual Studio 2012\Projects\MyProject\" "any old string" 

Я получаю ошибку снова, и после просмотра в отладке я вижу, что арг [0] является:

C: \ Users \ DevDave \ Documents \ Visual Studio 2012 \ Projects \ MyProject "any

Я сбив с толку, почему это происходит. Мое единственное предположение заключается в том, что обратная косая черта в строке вызывает какую-то escape-последовательность из строки? Редактировать: Я замечаю, что то же самое происходит в примере строки выше! Кажется, что здесь возникают проблемы.

Я просто хочу передать путь к файлу текущего каталога решений и вызывать свое приложение из события предварительной сборки, используя $ (SolutionDir), и знаю, что могу получить путь текущего решения другими способами. Но это самый простой и мне интересно, почему он не работает, как ожидалось.

+0

Я знаю, что это не прямой ответ, но вы можете получить текущий путь от 'Directory.GetCurrentDirectory()' – wudzik

+0

@PhilipGullick @ строк не будет работать в консоли. –

+0

# Делает комментарий и шкуры. Я не знаю, что я читал ... –

ответ

5

Да, правила для аргументов командной строки немного мутная.

\ является escape-символом, и вы можете использовать его для возврата котировок ("). Вам придется избегать обратной косой черты, но только тогда, когда она предшествует цитате. Поэтому используйте (обратите внимание на «\\» в конце):

MyApp "C:\Users\DevDave\Documents\Visual Studio 2012\Projects\MyProject\\" 

или, проще, но вы будете иметь дело с этим в C# как-то:

MyApp "C:\Users\DevDave\Documents\Visual Studio 2012\Projects\MyProject" 

Также см this question

+0

Можете ли вы попробовать MyApp «C: \ Users \ DevDave \ Documents \ Visual Studio 2012 \ Projects \ MyProject \ –

+0

@NisargShah - не знаете, что вы имеете в виду, возможно, ваше форматирование получено Смешанный. '\\' тоже особенный в комментариях. –

+0

@HenkHolterman Я очень ненавижу вас, потому что каждый раз (не каждый раз, но довольно часто), когда я собираюсь опубликовать ответ, вы избиваете меня это :) Мне действительно нужно больше практики stackoverflow. –

1

Вот почему это всегда лучше использовать / в пути

"C:/Users/DevDave/Documents/Visual Studio 2012/Projects/MyProject/" "any old string" 

посмотреть: http://en.wikipedia.org/wiki/Path_(computing), вы можете использовать оба \ и / в пути, но если вы хотите какой-либо совместимости оболочки я предлагаю использовать /

1

Все, что приходит после того, как MyApp будет первый аргумент (арг [0]). В вашем случае первый аргумент - "C:\Users\DevDave\Documents\Visual Studio 2012\Projects\MyProject\". Кроме того, цитата в конце строки, похоже, происходит потому, что \" означает, что вы хотите избежать цитаты и записать ее как строку. В этом случае цитата не закрывает строку.Это является причиной того, что ваши аргументы [0] есть все, что приходит после того, как MyApp

Если вы не хотите усиков цитаты и имеют косую черту за ним, вы должны сделать \\"

Вы могли бы попробовать это и скажите мне, что происходит:

MyApp "C:\Users\DevDave\Documents\Visual Studio 2012\Projects\MyProject\\" 

(посмотреть на двойном слэше)

Надеется, что это помогает.

0

Продолжение ответа Хенка, и выбрать, чтобы добавить \ в конце пути, а затем:

Если вы решили взломать ошибку, выбрав этот код в ответ Henk в ("проще, но вы будете иметь иметь дело с этим в C# как-то: "), то вы должны понимать некоторые ошибки, которые будут происходить:.

  1. арг [0] будет установлено только, даже если передать несколько параметров в длину арг будет быть равным 1. Таким образом, вы должны разделить args [0] на несколько частей для вашего взлома.

  2. Вы должны заменить любые цифры "\, если они находятся в конце разделенных частей.

Смежные вопросы