2016-06-16 3 views
0

Я положил значение аргумента командной строки "1|2|c:\temp" в разделе properties-> debug.не может быть равно нулю. путь имени параметра

В моем коде я прочитал данные с помощью

string[] args = Environment.CommandLine.Split('|').ToArray(); 

Когда я запускаю приложение, я получаю все значения аргумента и работает нормально, но когда я запускаю файл ехе я получаю значение

не может быть пустым. путь имени параметра

Я искал google, но понятия не имел и как это решить.

Код:

string[] args = Environment.CommandLine.Split('|').ToArray(); 

for (int i = 0; i < args.Count(); i++) 
{ 
    switch (i) 
    { 
     case 0: 
      break; 
     case 1: 
      break; 
     case 2: 
      this.ImageFilePath = args[i]; 
      break; 
     case 3: 
      this.ImageFileName = args[i]; 
      break; 
     } 
    } 

Пожалуйста, дайте мне решение или идею резольную ошибку.

+2

'string.Split' возвращает массив, поэтому' ToArray' бессмысленно. – juharr

+2

Как вы управляете exe? Двойным щелчком по нему вы не получите аргументы, и вы не будете обрабатывать пустое условие args. – Shaharyar

+3

Если вы запускаете exe-файл из командной строки, и вы пытаетесь передать параметры с помощью pipe | символ, который фактически используется операционной системой для получения результата от одной команды к другой. Попробуйте использовать другой символ в качестве разделителя. – sheppe

ответ

0

Будьте осторожны с использованием символа трубы (|) в параметрах для утилит командной строки. Если вы не заключите его в двойные кавычки, исполняемый файл получит только часть параметра. Например.

test.exe this|is|a|test 

... приведет только к тому, что параметр "this" будет передан test.exe. Затем выход test.exe будет передан в приложение is, если он существует, и выход этого трубопровода в приложение a и т. Д.

С другой стороны, это должно делать то, что вы ожидаете :

test.exe "this|is|a|test" 

Лично я хотел бы использовать альтернативный символ разделителя.

+0

Это более подробная версия того, что я сказал в комментариях к исходному вопросу. Мне это не показалось «достойным ответа». – sheppe

+1

@sheppe Да, я начал писать его до того, как вы прокомментировали, и я добавил +1 к вашему комментарию после того, как отправил ответ. Иногда это помогает объяснить в полном объеме, и мне было скучно :) – wardies

+0

Спасибо всем за быстрый ответ. Я буду изменять код в соответствии с вашими советами. – Morshed