C # путь в двойных кавычках экранируется при чтении из файла - PullRequest
0 голосов
/ 25 марта 2010

Я пытаюсь прочитать текстовый файл ввода, который содержит список имен файлов (по одному в строке). Тем не менее, я сталкиваюсь с проблемой, если пользователь дважды заключает путь в кавычки (потому что в нем есть пробел).

Например, обычный входной файл может иметь:
C: \ test \ test.tiff
C: \ test \ anothertest.tiff
C: \ test \ lasttest.tiff

Они хорошо читаются моим кодом ("C: \\ test \\ test.tiff" и т. Д.)

Однако, если у меня есть следующий входной файл:
"C: \ тест с пробелами \ test.tiff"
"C: \ test с пробелами \ anothertest.tiff"
"C: \ тест с пробелами \ lasttest.tiff"

Они читаются в двойных кавычках и все ("\" C: \\ test с пробелами \\ test.tiff \ "" и т. Д.). Это становится проблемой, когда я пытаюсь открыть файлы (по понятным причинам я получаю недопустимые исключения символов). У меня вопрос, как мне это исправить? Я хочу позволить пользователям вводить строки в кавычках и обрабатывать их правильно. Моим первым впечатлением было написать небольшой метод, который удаляет начальные или конечные кавычки, но я подумал, что может быть лучше.

Ответы [ 5 ]

2 голосов
/ 25 марта 2010

Нет необходимости в RegEx, где простой Replace будет делать:

var s = s.Replace("\"", "");
1 голос
/ 25 марта 2010

Может быть, попробовать использовать строковые литералы?

string bob = @ "c: \ some file \ some document";

@ избегает этих проблем с обратной косой чертой.

1 голос
/ 25 марта 2010

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

Да, я тоже так делаю. =)

0 голосов
/ 25 марта 2010

Я думаю, что RegEx довольно тяжелый по сравнению с простой заменой, поэтому

File.ReadAllText(path.Replace('"',''));

Или подобное было бы моим предложением.

0 голосов
/ 25 марта 2010

Если у вас есть только один файл в строке, вы можете просто сделать Regex.Replace(PathLine,"\"","")

Если вы этого не сделаете, вам нужно будет каждый раз делить PathLine.Split(new string[] { "\" ", "\"\n" }, StringSplitOptions.RemoveEmptyEntries);, затем уберите начало "

...