Escape имени файловой системы? C # - PullRequest
7 голосов
/ 20 июня 2009

Я разрешаю пользователю выбрать любое имя пользователя, которое он хочет, и это может быть что угодно, например

AC♀¿!$"Man'@

Теперь мне нужно создать каталог для него. Какую функцию я использую для экранирования текста, поэтому я не проблема / исключение FS?

Ответы [ 6 ]

10 голосов
/ 20 июня 2009

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

6 голосов
/ 20 июня 2009

В зависимости от того, являются ли ваши символы ASCII / Unicode, вы можете использовать значения байта / символа в качестве замены и использовать какой-либо символ для маркировки этих замененных символов (например, подчеркивания), что дает вам что-то вроде _001_255_200ValidPart_095_253. Обратите внимание, что вы также должны заменить маркировочные символы (_095 в примере, 95 - это код ASCII для подчеркивания).

3 голосов
/ 20 июня 2009

Используйте Path.GetInvalidFileNameChars или Path.GetInvalidPathChars, чтобы проверить символы для удаления.

http://msdn.microsoft.com/en-us/library/system.io.path.getinvalidfilenamechars.aspx

2 голосов
/ 20 июня 2009

Я думаю, что вам лучше всего создать словарь, который отображает недопустимые символы файловой системы в допустимую строку замены. Затем просканируйте строку на наличие недопустимых символов, заменив их правильными строками. Это позволит пользователю выбирать все, что он захочет, и даст вам последовательность, чтобы перевести это обратно в имя пользователя, если хотите.

1 голос
/ 20 июня 2009

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

Более надежным подходом будет создание каталога с использованием некоторого произвольного соглашения, а затем сохранение соответствия между ними. Это также обеспечивает поддержку для случая, когда ваш пользователь хочет изменить имя.

Проверьте вопрос # 663520 , чтобы узнать больше об этом.

0 голосов
/ 20 июня 2009

нужно ли пользователю знать точное имя своего каталога? Если нет, то почему бы не создать каталоги с использованием произвольных правил и связать каждый из них с его владельцем в БД или что-то в этом роде?

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