在 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#文件名/路径处理方法示例