Я прохожу /file:c:\myfile.doc и возвращаю "/file:c:\myfile.doc" вместо "C: \ myfile.doc", может кто-нибудь, пожалуйста, посоветуйте, где я ошибаюсь ?
if (entry.ToUpper().IndexOf("FILE") != -1)
{
//override default log location
MyFileLocation = entry.Split(new char[] {'='})[1];
}





Вы разделяете на "=" вместо ":"
Пытаться
if (entry.ToUpper().IndexOf("FILE:") == 0)
{
//override default log location
MyFileLocation location = entry.Split(new char[] {':'},2)[1];
}
Если в вашей строке ввода нет символа «:», этот код вызовет исключение OutOfRangeException. Вы должны это проверить.
Двоеточие гарантировано, так как оно должно соответствовать строке "FILE:"
Обратите внимание, что могут быть более эффективные способы сделать это - я просто хотел показать, как исправить данный код.
Вы также можете просто отрезать часть «файл:». Он четко определен и будет постоянным, так что это не так уж и плохо. Не здорово, но и не ужасно.
Вот хороший пример синтаксический анализатор аргументов командной строки.
Самый простой способ сделать это - просто взять подстроку. Поскольку вы читаете это из командной строки, часть «/ file:» всегда будет согласованной.
entry.Substring(6);
Это вернет все, что находится после "/ file:".
Для опубликованного вами кода потребуется аргумент /file=c:\myfile.doc.
Либо используйте это как параметр, либо разделите двоеточие (:) вместо равно (знак равно).
Не ответ, поскольку я думаю, что на него уже дан достаточно хороший ответ, но когда вы заявили, что вы новичок, я подумал, что хочу указать на это:
entry.split(new char[]{':'});
может быть:
entry.split(':');
Это использует:
split(params char[] separator);
Это может ввести в заблуждение новых программистов на C#, поскольку ключевое слово params означает, что вы можете передавать от 1 до многих символов, например:
entry.split(':','.',' ');
Это также устраняет проблему, когда файл существует где-то в середине имени файла, совпадает с ошибкой и учитывает несколько двоеточий в строке, разбивая не более чем на 2 подстроки.