С#:Удалить недопустимые символы из строки имени файла
-
05-07-2019 - |
Вопрос
Почему это ничего не даст, вывод идентичен вводу?Я в недоумении!!!
string name = ";;;'']][[ zion \\\[[[]]]"
char[] invalidChars = System.IO.Path.GetInvalidPathChars();
string invalidString = Regex.Escape(new string(invalidChars));
string valid = Regex.Replace(name, "[" + invalidString + "]", "");
Решение
РЕДАКТИРОВАТЬ:
Я думаю, что это может быть просто случай несовершенных тестовых данных (наряду с изменением функции, предложенным другими).Попробуй это:
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».Я бы определенно предложил провести еще больше испытаний, прежде чем использовать это в производстве!:)
Другие советы
Получить недопустимые символы в файле, используя
char[] invalidChars=System.IO.Path.GetInvalidFileNameChars();
Что вы имеете в виду, говоря, что это ничего не сделает?Я запустил следующее в консольном приложении:
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) и вкладка ( ).
Кажется, ничего из этого не встречается в исходной строке.