详解C# 不能用于文件名的字符
程序员文章站
2023-12-19 16:05:46
在 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$, nul com0, com1, com2, com3, com4, com5, com6, com7, com8, com9 lpt0, 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 '\0': 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# 不能用于文件名的字符,希望对大家有所帮助