Подтвердить что ты не робот

С# string.replace для удаления недопустимых символов

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

string headerfile = saveDir + "\\" + tVS.Nodes[r].Text.Replace("\"", "").Replace
              ("/","").Replace(":"," -").Replace(">","(Greater Than)") + ".csv";

Есть ли лучший способ сделать это, когда у меня нет 4 .Replace()? или есть какой-то встроенный нелегальный изъятие символов, о котором я не знаю?

Спасибо!

РЕДАКТИРОВАТЬ: Не нужно заменять символы чем-либо конкретным. Пустое пространство достаточно.

4b9b3361

Ответ 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, "");

Если вы просто хотите удалить незаконные символы, а не заменять их чем-то другим, вы можете использовать это.