虚位以待(AD)
虚位以待(AD)
首页 > 软件编程 > C#编程 > 详解C# 不能用于文件名的字符

详解C# 不能用于文件名的字符
类别:C#编程   作者:码皇   来源:互联网   点击:

在 Windows 有一些字符是不能作为文件名,尝试重命名一个文件,输入 就可以看到windows 提示的不能作为文件名的字符,那么具体是包括哪些符号不能作为文件名呢?下面小编给大家介绍下

在 Windows 有一些字符是不能作为文件名,尝试重命名一个文件,输入/ 就可以看到windows 提示的不能作为文件名的字符

那么具体是包括哪些符号不能作为文件名?

  • Tilde (~)
  • Number sign (#)
  • Percent (%)
  • Ampersand (&)
  • Asterisk (*)
  • Braces ({ })
  • Backslash ()
  • Colon (:)
  • Angle brackets (< >)
  • Question mark (?)
  • Slash (/)
  • Plus sign (+)
  • Pipe (")
  • Quotation mark (")

上面这些字符不能用来文件名和文件夹名

而且在 windows 的要求,文件是需要有文件名的,虽然你也可以创建.file这样的文件,但是用户是难以自己输入这样的文件名。

之外还有一些文件名是保留,不能创建这样的文件名

    CON, PRN, AUX, CLOCK$, NULCOM0, COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9LPT0, LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8, and LPT9.

尝试新建一个文本,然后把他文件名命名为上面的任意一个,基本windows会说不能把文件命名

那么是不是把这些字符串拿出来判断?实际上微软已经做了这个了,因为在不同的系统,可能之后会添加新的字符串,所以最好不要自己写。

可以使用微软给的函数System.IO.Path.GetInvalidFileNameChars ,下面的代码可以直接使用

    public static string MakeValidFileName(string text, string replacement = "_") {
    StringBuilder str=new StringBuilder();
    var invalidFileNameChars = System.IO.Path.GetInvalidFileNameChars();
    foreach (var c in text) {
    if (invalidFileNameChars.Contains(c)) {
    str.Append(replacement??"");
    }
    else {
    str.Append(c);
    }
    }
    return str.ToString();
    }

如果确实需要显示文件名,请使用下面代码

    public static string GetSafeFilename(string arbitraryString){
    var invalidChars = System.IO.Path.GetInvalidFileNameChars();
    var replaceIndex = arbitraryString.IndexOfAny(invalidChars, 0);
    if (replaceIndex == -1) return arbitraryString;
    var r = new StringBuilder();
    var i = 0;
    do {
    r.Append(arbitraryString, i, replaceIndex - i);
    switch (arbitraryString[replaceIndex]) {
    case '"': r.Append("''");
    break;
    case '<': r.Append('u02c2');
    // '˂
    ' (modifier letter left arrowhead) break;
    case '>': r.Append('u02c3');
    // '˃
    ' (modifier letter right arrowhead) break;
    case '|': r.Append('u2223');
    // '∣' (divides) break;
    case ':': r.Append('-');
    break;
    case '*': r.Append('u2217');
    // '∗
    ' (asterisk operator) break;
    case '\': case '/': r.Append('u2044');
    // '⁄
    ' (fraction slash) break;
    case '': case 'f': case '?': break;
    case 't': case 'n': case 'r': case 'v': r.Append(' ');
    break;
    default: r.Append('_');
    break;
    }
    i = replaceIndex + 1;
    replaceIndex = arbitraryString.IndexOfAny(invalidChars, i);
    }
    while (replaceIndex != -1);
    r.Append(arbitraryString, i, arbitraryString.Length - i);
    return r.ToString();
    }

总结

以上所述是小编给大家介绍的C# 不能用于文件名的字符,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

您可能感兴趣的文章:

  • C#中文件名或文件路径非法字符判断方法
  • C#编程实现获取文件夹中所有文件的文件名
  • C#中的文件路径获取函数和文件名字获取函数小结
  • C#将时间转成文件名使用方法
  • c#文件名/路径处理方法示例
相关热词搜索: C 文件名字符