在 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();
}

上面的代码是jnm2 大神写的

参见:Information about the characters that you cannot use in site names, folder names, and file names in SharePoint

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 ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请与我联系。

C# 不能用于文件名的字符相关推荐

  1. windows文件名非法字符过滤检测-正则表达式

    过滤文件名非法字符 windows现在已知的文件名非法字符有 \ / : * ? " < > | var reg = new RegExp('[\\\\/:*?\"&l ...

  2. 帮我写一段dart代码,目的是将字符串里的windows、macos、linux系统中的文件名保留字符替换成中文全角字符。使最后返回的字符串可以用于windows、macos、linux的文件名...

    String replaceSpecialChar(String str) {str = str.replaceAll("/", "/");str = str. ...

  3. 设计的界面如下图所示:窗体的标题栏显示“模拟计算器—江海大”,1个文本框用于显示输入字符和计算结果;20个按钮控件作为字符输入按键或者功能按键。

    (2)计算功能:实现加.减.乘.除等双目运算,开平方.百分数等单目运算: ​(3)辅助功能:按钮"C"清空文本框:按钮"←"退格,删除文本框中最右边的一个字符. ...

  4. 用于存储中文字符的字典树

    引言 在做中文分词的项目中,需要重复读取词库中的数据.因此如果简单得将词库中的词语读取到列表中会降低会降低每次扫描的效率.于是采用Trie(字典树)的数据结构来进行存储. 在这篇博文中,已经对Trie ...

  5. 255字符c语言中,在单片机C语言程序设计中,______类型数据经常用于处理ASCⅡ字符或处理小于等于255的整型数 答案:char...

    夫通性转导,各说过者也:噬菌体转导供体菌染色体时位之义 随机抽样又名()耳:概率抽样 六十岁男,病患高血压年,忽见心慌.闷.膺而迫性疼痛,诊为暴心痛,应用何药宜也:硝酸甘油舌下含化 如寄生义类计算机疢 ...

  6. windows文件名——非法字符及记忆技巧

    <|>\/:"*?    一共9个 <>\/  这4个可以用对称来记,加上|竖线在中间 <|>或者\|/    这样就记住5个了 :"  冒号和 ...

  7. 2018-8-10-dotnet-从入门到放弃的-500-篇文章合集

    title author date CreateTime categories dotnet 从入门到放弃的 500 篇文章合集 lindexi 2018-08-10 19:16:52 +0800 2 ...

  8. dotnet 从入门到放弃的 500 篇文章合集

    本文是记录我从入门到放弃写的博客 博客包括 C#.WPF.UWP.dotnet core .git 和 VisualStudio 和一些算法,所有博客使用 docx 保存 下载:dotnet 从入门到 ...

  9. 【Python】将微信收藏的文章批量导出为pdf

    [Python]将微信收藏的文章批量导出为pdf 第一步:导出微信收藏的链接 第二步:将所有网址导出为pdf 写在前面 微信收藏了大量的文章,一直没时间看.乘飞机或火车时有闲暇时间但网络不行.本文提供 ...

最新文章

  1. 安装anaconda 报错 failed to create menus
  2. ansible-playbook如何判断并中断执行
  3. rtmp协议封装h264与h265打包flv发送
  4. 新华社报道关注松果出行:助力国家碳达峰碳中和目标
  5. 45页的NAS神经网络搜索的综述,请查收!
  6. Python 函数基础2 实参与形参
  7. 用一个单链表L实现一个栈(算法导论第十章10.2-2题)
  8. java工程mvn引用jar_maven 项目加载本地JAR
  9. php $handle,laravel $kernel-handle 报错的解决办法_PHP开发框架教程
  10. 哪个Linux发行版运行kvm,如何在Linux发行版上安装和配置KVM和Open vSwitch
  11. Oracle分页查询格式(八)
  12. CUDA算法——Stream and Event
  13. [渝粤教育] 武汉理工大学 模拟电子技术基础 参考 资料
  14. Flutter监听网络变化
  15. linux系统如何使用qq,Linux系统中怎么使用QQ
  16. 乐高机器人巡线C语言程序,乐高机器人巡线原理
  17. 软件测试真实项目大全,真实案例-项目可用性测试总结
  18. 数学——每日一题7 1.14 利用定积分的定义求极限
  19. php获得当月的节假日函数(包含周末,年度节假日)
  20. 【论文合集】2022年12月医学影像期刊论文合集

热门文章

  1. 使用华为存储配置ISCSI(一)
  2. Excel中的绝对引用
  3. S136模具钢:高耐磨抗腐蚀预硬镜面钢材特性以及应用范围
  4. 高并发性能/压力测试思路
  5. 悦刻空弹回收计划首个乡村振兴项目建设完成,2022年再开回收新城
  6. 2007的LOGG4J学习笔记
  7. 如何给目标机器人建模并仿真【数学/控制意义】
  8. yum安装步骤(网络下载安装)
  9. Python内存模型
  10. 三星s7 android8.0,不抛弃不放弃:三星正为S7系列打造Android 8.0