C#string.replace删除非法字符

Axx*_*ian 13 c# string

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

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

在没有4的情况下有没有更好的方法.Replace()呢?或者是否有某种内置的非法角色去除器,我不知道?

谢谢!

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

Ry-*_*Ry- 35

正则表达式通常是一种很好的方法,但是当你用不同的东西替换每个角色时却不是这样.你可以考虑用同样的东西替换它们,然后使用System.IO.Path.GetInvalidFileNameChars().

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

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


I a*_*ica 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);
}
Run Code Online (Sandbox Code Playgroud)