我正在开发一个程序,根据列标题读取文件并保存它们。其中一些标题有文件名的非法字符,所以我写了这段代码来处理这些问题。
string headerfile = saveDir + "\\" + tVS.Nodes[r].Text.Replace("\"", "").Replace
("/","").Replace(":"," -").Replace(">","(Greater Than)") + ".csv";
有没有更好的方法可以做到4 .Replace()
?还是有某种内置的非法角色去除器,我不知道?
谢谢!
编辑:不需要用特定的字符替换字符。一个空白就足够了。
答案 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, "");
如果您只想删除非法字符,而不是用其他字符替换它们,您可以使用它。