How to remove illegal characters from path and filenames?

前端 未结 29 3511
离开以前
离开以前 2020-11-22 17:18

I need a robust and simple way to remove illegal path and file characters from a simple string. I\'ve used the below code but it doesn\'t seem to do anything, what am I miss

29条回答
  •  时光说笑
    2020-11-22 17:28

    I've rolled my own method, which seems to be a lot faster of other posted here (especially the regex which is so sloooooow) but I didn't tested all methods posted.

    https://dotnetfiddle.net/haIXiY

    The first method (mine) and second (also mine, but old one) also do an added check on backslashes, so the benchmark are not perfect, but anyways it's just to give you an idea.

    Result on my laptop (for 100 000 iterations):

    StringHelper.RemoveInvalidCharacters 1: 451 ms  
    StringHelper.RemoveInvalidCharacters 2: 7139 ms  
    StringHelper.RemoveInvalidCharacters 3: 2447 ms  
    StringHelper.RemoveInvalidCharacters 4: 3733 ms  
    StringHelper.RemoveInvalidCharacters 5: 11689 ms  (==> Regex!)
    

    The fastest method:

    public static string RemoveInvalidCharacters(string content, char replace = '_', bool doNotReplaceBackslashes = false)
    {
        if (string.IsNullOrEmpty(content))
            return content;
    
        var idx = content.IndexOfAny(InvalidCharacters);
        if (idx >= 0)
        {
            var sb = new StringBuilder(content);
            while (idx >= 0)
            {
                if (sb[idx] != '\\' || !doNotReplaceBackslashes)
                    sb[idx] = replace;
                idx = content.IndexOfAny(InvalidCharacters, idx+1);
            }
            return sb.ToString();
        }
        return content;
    }
    

    Method doesn't compile "as is" dur to InvalidCharacters property, check the fiddle for full code

提交回复
热议问题