C #: удаление незаконных символов из строки имени файла - PullRequest
3 голосов
/ 10 сентября 2009

Почему это ничего не делает, вывод идентичен вводу? Я сбит с толку !!!

string name = ";;;'']][[ zion \\\[[[]]]"  
char[] invalidChars = System.IO.Path.GetInvalidPathChars();
string invalidString = Regex.Escape(new string(invalidChars));

string valid = Regex.Replace(name, "[" + invalidString + "]", "");

Ответы [ 3 ]

6 голосов
/ 10 сентября 2009

РЕДАКТИРОВАТЬ:

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

string name = "tru\\e.jpg";
char[] invalidChars = System.IO.Path.GetInvalidFileNameChars();
string invalidString = Regex.Escape(new string(invalidChars));
string valid = Regex.Replace(name, "[" + invalidString + "]", "");
Console.WriteLine(valid);

Я получаю вывод "true.jpg".Я бы определенно предложил гораздо больше испытаний, прежде чем использовать это в производстве!:)

4 голосов
/ 10 сентября 2009

Получить недопустимые символы файла, используя,

char[] invalidChars=System.IO.Path.GetInvalidFileNameChars();
4 голосов
/ 10 сентября 2009

Что ты имеешь в виду под этим не будет ничего делать? Я запустил в консольном приложении следующее:

string name = ";;;'']][[ zion \\\\[[[]]]";
char[] invalidChars = System.IO.Path.GetInvalidPathChars();
string invalidString = Regex.Escape(new string(invalidChars));

string valid = Regex.Replace(name, "[" + invalidString + "]", "");
Console.WriteLine(valid);

Кстати, ваш синтаксис был неверным, у вас было несколько неэкранированных символов и вы пропустили точку с запятой.

И я получил следующий результат.

;;;'']][[ zion \\[[[]]]

Какой правильный результат. Возможно, вам следует задать новый вопрос о том, что вы пытаетесь сделать, потому что ваш нынешний подход, кажется, указывает на то, что вы недостаточно хорошо понимаете Regex.

Обновление : Вы пытаетесь проверить имена файлов? Если это так, вы, вероятно, хотите использовать:

System.IO.Path.GetInvalidFileNameChars();

Обновление : Вот список недопустимых символов, полученных этим методом GetInvalidPathChars()

RealInvalidPathChars = new char[] { 
        '"', '<', '>', '|', '\0', '\x0001', '\x0002', '\x0003', '\x0004', '\x0005', '\x0006', '\a', '\b', '\t', '\n', '\v', 
        '\f', '\r', '\x000e', '\x000f', '\x0010', '\x0011', '\x0012', '\x0013', '\x0014', '\x0015', '\x0016', '\x0017', '\x0018', '\x0019', '\x001a', '\x001b', 
        '\x001c', '\x001d', '\x001e', '\x001f'
     };

Таким образом, следующие недопустимые символы пути могут включать символы ASCII / Unicode с 1 по 31, а также кавычки ("), меньше (<), больше (>), символ (|), пробел (\ b ), ноль (\ 0) и табуляция (\ t).

Ничего из этого не встречается в вашей исходной строке.

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