Проверка пути к файлу с пробелами в C # - PullRequest
2 голосов
/ 04 декабря 2009

Я что-то вроде n00b на C #, и у меня возникают проблемы с поиском ответа на этот вопрос, поэтому, если он уже где-то был дан ответ, не стесняйтесь смеяться надо мной (если вы также поделитесь решением) :)

Я читаю XML-файл в форме графического интерфейса, где определенные элементы - это пути к файлам, которые вводятся в объекты TextBox. Я перебираю элементы управления в форме, и для каждого пути к файлу в каждом TextBox (похоже, их 20 в этой форме) я хочу использовать File.Exists (), чтобы убедиться, что это правильный файл.

Проблема в том, что путь к файлу может содержать пробелы и может быть допустимым; однако File.Exists () говорит мне, что он недопустим, основываясь исключительно на пробелах. Очевидно, я не могу жестко их кодировать и делать что-то вроде

if (File.Exists(@"c:\Path To Stuff"))

и я попытался окружить путь ", как

if (File.Exists("\"" + contentsOfTextBox + "\""))

но это не имело значения. Есть ли способ сделать это? Можно ли как-нибудь сбежать из пробелов?

Спасибо, что уделили время. :)

Ответы [ 9 ]

4 голосов
/ 04 декабря 2009

@ "c: \ Path To Stuff"

Выше может быть каталог , а не a file !

Следовательно, вы хотели бы использовать Directory.Exists!

@ "c: \ Path To Stuff \ file.txt"

Если у вас есть файл в конце пути, вы должны использовать File.Exists!

4 голосов
/ 04 декабря 2009

File.Exists прекрасно работает с пробелами. Есть еще кое-что, что может поставить вас в тупик.

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

2 голосов
/ 04 декабря 2009

Как сказано в ответе, File.Exists работает с пробелами, однако, если вы проверяете наличие Каталога, вам следует использовать Directory.Exists

1 голос
/ 12 января 2011

Чтобы повторить Рона Уорхолика: убедитесь, что у процесса есть разрешения на целевую папку. Я просто столкнулся с той же «ошибкой», и это оказалось проблемой с правами доступа.

1 голос
/ 04 декабря 2009

Какую именно ошибку вы получаете, когда File.Exists говорит, что она недействительна?

Я подозреваю , что вы передаете путь к каталогу, а не к файлу, который вернет false. Если это так, чтобы проверить наличие каталога, используйте Directory.Exists .

0 голосов
/ 15 декабря 2009

Вы можете использовать @ для строковых переменных:

string aPath = "c:\Path To Stuff\text.txt";
File.Exists(@aPath);

Это должно решить любые проблемы с escape-символами, потому что я не думаю, что это действительно похоже на пробелы.

0 голосов
/ 04 декабря 2009

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

как только это будет сделано, просто напишите () на экране, где у вас есть файлы, если это xml, тогда вашего xmlmapper будет достаточно

file.exists () следует использовать только при определенных обстоятельствах, если вы знаете, что он существует, но не тогда, когда могут быть пробелы или любой другой возможный ввод пользователя

0 голосов
/ 04 декабря 2009

Вам нужно использовать youtStringValue.Trim (), чтобы удалить пробелы в начале / конце, и Replace, чтобы удалить пробелы в строке, которую вы не хотите.

Кроме того, лучше использовать System.IO.Path.Combine, а не объединять эти строки.

0 голосов
/ 04 декабря 2009

Вы не забыли заменить \ \ \?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...