C#string.replace删除非法字符

时间:2012-06-05 13:35:14

标签: c# string

我正在开发一个程序,根据列标题读取文件并保存它们。其中一些标题有文件名的非法字符,所以我写了这段代码来处理这些问题。

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

有没有更好的方法可以做到4 .Replace()?还是有某种内置的非法角色去除器,我不知道?

谢谢!

编辑:不需要用特定的字符替换字符。一个空白就足够了。

4 个答案:

答案 0 :(得分:34)

正则表达式通常是一种很好的方法,但是当你用不同的东西替换每个角色时却不是这样。您可以考虑使用相同的内容替换所有内容,并使用System.IO.Path.GetInvalidFileNameChars()

string filename = tVS.Nodes[r].Text;

foreach(char c in System.IO.Path.GetInvalidFileNameChars()) {
    filename = filename.Replace(c, '_');
}

答案 1 :(得分:8)

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);
}

答案 2 :(得分:2)

看一下Regex.Replace here,它会在你单独剥离字符时做你想做的一切。选择性地替换其他字符串可能比较棘手。

答案 3 :(得分:2)

string charsToRemove = @"\/:";TODO complete this list

string filename;

string pattern = string.format("[{0}]", Regex.Escape(charsToRemove));
Regex.Replace(filename, pattern, "");

如果您只想删除非法字符,而不是用其他字符替换它们,您可以使用它。