首页 / C# / C# 不能用于文件名的字符
C# 不能用于文件名的字符
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了C# 不能用于文件名的字符,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2697字,纯文字阅读大概需要4分钟。
内容图文
![C# 不能用于文件名的字符](/upload/InfoBanner/zyjiaocheng/1137/4cbb8d295a3a41b2a07f353bde36ad51.jpg)
在 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
,下面的代码可以直接使用
publicstaticstringMakeValidFileName(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();
}
如果确实需要显示文件名,请使用下面代码
publicstaticstringGetSafeFilename(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();
}
上面的代码是jnm2 大神写的
c# - How to make a valid Windows filename from an arbitrary string
我搭建了自己的博客 https://lindexi.gitee.io/ 欢迎大家访问,里面有很多新的博客。只有在我看到博客写成熟之后才会放在csdn或博客园,但是一旦发布了就不再更新
如果在博客看到有任何不懂的,欢迎交流,我搭建了 dotnet 职业技术学院 欢迎大家加入
本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。欢迎转载、使用、重新发布,但务必保留文章署名林德熙(包含链接:http://blog.csdn.net/lindexi_gd ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请与我联系。
原文:https://www.cnblogs.com/lonelyxmas/p/9479084.html
内容总结
以上是互联网集市为您收集整理的C# 不能用于文件名的字符全部内容,希望文章能够帮你解决C# 不能用于文件名的字符所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。