С# string.replace для удаления недопустимых символов
Я работаю над программой, которая читает файлы и сохраняет их в соответствии с заголовком столбца. Некоторые из этих названий имеют незаконные символы для имен файлов, поэтому я написал этот фрагмент кода для устранения этих проблем.
string headerfile = saveDir + "\\" + tVS.Nodes[r].Text.Replace("\"", "").Replace
("/","").Replace(":"," -").Replace(">","(Greater Than)") + ".csv";
Есть ли лучший способ сделать это, когда у меня нет 4 .Replace()
? или есть какой-то встроенный нелегальный изъятие символов, о котором я не знаю?
Спасибо!
РЕДАКТИРОВАТЬ: Не нужно заменять символы чем-либо конкретным. Пустое пространство достаточно.
Ответы
Ответ 1
Регулярные выражения обычно являются хорошим способом сделать это, но не тогда, когда вы заменяете каждого персонажа чем-то другим. Вы можете рассмотреть их замену на одну и ту же вещь и просто использовать System.IO.Path.GetInvalidFileNameChars()
.
string filename = tVS.Nodes[r].Text;
foreach(char c in System.IO.Path.GetInvalidFileNameChars()) {
filename = filename.Replace(c, '_');
}
Ответ 2
System.IO.Path.GetInvalidFileNameChars()
имеет все недопустимые символы.
Здесь пример метода:
public static string SanitizeFileName(string fileName, char replacementChar = '_')
{
var blackList = new HashSet<char>(System.IO.Path.GetInvalidFileNameChars());
var output = fileName.ToCharArray();
for (int i = 0, ln = output.Length; i < ln; i++)
{
if (blackList.Contains(output[i]))
{
output[i] = replacementChar;
}
}
return new String(output);
}
Ответ 3
Посмотрите на Regex.Replace здесь, он будет делать все, что вы пожелаете, когда дело доходит до разборки персонажей в отдельности. Селективная замена других строк может оказаться более сложной.
Ответ 4
string charsToRemove = @"\/:";TODO complete this list
string filename;
string pattern = string.format("[{0}]", Regex.Escape(charsToRemove));
Regex.Replace(filename, pattern, "");
Если вы просто хотите удалить незаконные символы, а не заменять их чем-то другим, вы можете использовать это.