2014-10-20 2 views
0

У меня проблема с пробелами в моем консольном приложении. Мое приложение рушится из-за недопустимых chararcters.Как обрабатывать пробелы в путях в параметрах командной строки

Мое приложение ожидает аргумент, который является путем к файловой системе. Так она будет называться как этот

myProg.exe "D:\tmp\with whitespace\" 

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

String pdfName = "foobar.pdf 
String datapath = args[0]; 
String targetJobFile = datapath + pdfName + ".txt";  

Я могу видеть в отладчике, что значение targetJobFile является

"D:\tmp\with whitespace\"foobar.pdf.txt 

И я получаю исключение. Благодаря

+1

Вы должны использовать 'Path.Combine', он будет обрабатывать такие проблемы. - [Path.Combine on MSDN] (http://msdn.microsoft.com/en-us/library/system.io.path.combine (v = vs.110) .aspx) – crashmstr

+0

делает эту строку 'String pdfName = «foobar.pdf' даже компилировать? ваш параметр должен работать нормально, поскольку они заключены в двойные кавычки – Habib

ответ

1

Вы должны удалить кавычки из аргументов, поэтому перед использованием его, используйте Trim:

String realArg = args[0].Trim('"'); 

Вы уже есть \ что Path.Combine даст вам; но если вы не хотите, чтобы ваши пользователи вводили его, использование Path.Combine - это хороший способ получить символ разделителя пути в вашей строке.

0

Почему не только проверить наличие " характера и заменить их, прежде чем сделать полный путь

 datapath = datapath.Replace("\"",""); 
     String targetJobFile = datapath + pdfName; 
0

Вы можете сделать еще один шаг вперед и использовать Path.GetInvalidPathChars(), который возвращает все недопустимые символы не допускаются в именах путей и удалите их со своего пути следующим образом:

modifiedPathName = new Regex (string.Format ("[{0}]", Regex.Escape (новая строка (Path.GetInvalidPathChars()))). Заменить (PathName, replaceChar);