How to remove illegal characters from path and filenames?

前端 未结 29 3415
离开以前
离开以前 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:24

    Try something like this instead;

    string illegal = "\"M\"\\a/ry/ h**ad:>> a\\/:*?\"| li*tt|le|| la\"mb.?";
    string invalid = new string(Path.GetInvalidFileNameChars()) + new string(Path.GetInvalidPathChars());
    
    foreach (char c in invalid)
    {
        illegal = illegal.Replace(c.ToString(), ""); 
    }
    

    But I have to agree with the comments, I'd probably try to deal with the source of the illegal paths, rather than try to mangle an illegal path into a legitimate but probably unintended one.

    Edit: Or a potentially 'better' solution, using Regex's.

    string illegal = "\"M\"\\a/ry/ h**ad:>> a\\/:*?\"| li*tt|le|| la\"mb.?";
    string regexSearch = new string(Path.GetInvalidFileNameChars()) + new string(Path.GetInvalidPathChars());
    Regex r = new Regex(string.Format("[{0}]", Regex.Escape(regexSearch)));
    illegal = r.Replace(illegal, "");
    

    Still, the question begs to be asked, why you're doing this in the first place.

提交回复
热议问题