Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#string.replace以删除非法字符_C#_String - Fatal编程技术网

C#string.replace以删除非法字符

C#string.replace以删除非法字符,c#,string,C#,String,我正在开发一个程序,它可以读取文件,并根据其列标题保存部分文件。其中一些标题的文件名包含非法字符,因此我编写了这段代码来处理这些问题 string headerfile = saveDir + "\\" + tVS.Nodes[r].Text.Replace("\"", "").Replace ("/","").Replace(":"," -").Replace(">","(Greater Than)") + ".csv"; 如果我没有4.Replace(),

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

string headerfile = saveDir + "\\" + tVS.Nodes[r].Text.Replace("\"", "").Replace
              ("/","").Replace(":"," -").Replace(">","(Greater Than)") + ".csv";
如果我没有4
.Replace()
,有没有更好的方法?还是有某种我不知道的内置非法角色移除器

谢谢


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

看看Regex.Replace,它可以做任何你想做的事情,当它涉及到单独剥离字符时。选择性地替换其他字符串可能更为棘手。

System.IO.Path。
包含所有无效字符

下面是一个示例方法:

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);
}
public静态字符串SanitizeFileName(字符串文件名,char replacementChar=''\u')
{
var blackList=newhashset(System.IO.Path.GetInvalidFileNameChars());
var output=fileName.ToCharArray();
for(inti=0,ln=output.Length;i
正则表达式通常是一种很好的方法,但在用不同的字符替换每个字符时就不行了。您可以考虑用相同的东西替换它们,只使用<代码> So.Io.Posi.GETMaulIDFLIENEMACHARS()/<代码> < /P>
如果您只是想删除非法字符,而不是用其他字符替换它们,您可以使用此选项。

如果您只是删除非法字符,您可以将其简化很多,但由于您要用其他字符替换大多数字符,您限制了很多选项。我不需要称它们为特定字符,它可能只是一个空白“。问题是,如果文件中有更多连续的无效字符,则会插入多个连续的“\u”,例如,将文件“my\\\ file\u\u\n”插入“my\\\ file\u\u\u\u\u\u”名称中。这很好,但是一个更好的解决方案是让它以“我的文件名”结尾。它对很多人都不起作用。在最后一行中,您应该将Regex修改后的值放入某个字符串变量,即
filename=Regex.Replace(filename,pattern,”)即使在2021年,这也是一个可爱的函数
string filename = tVS.Nodes[r].Text;

foreach(char c in System.IO.Path.GetInvalidFileNameChars()) {
    filename = filename.Replace(c, '_');
}
string charsToRemove = @"\/:";TODO complete this list

string filename;

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