详解C# 不能用于文件名的字符
在 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# 不能用于文件名的字符,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对我们网站的支持!
上一篇:C#实现简单加减乘除计算器
栏 目:C#教程
本文标题:详解C# 不能用于文件名的字符
本文地址:https://www.xiuzhanwang.com/a1/C_jiaocheng/5273.html
您可能感兴趣的文章
- 01-10WinForm限制窗体不能移到屏幕外的方法
- 01-10C#实现将窗体固定在显示器的左上角且不能移动的方法
- 01-10C# readnodefile()不能读取带有文件名为汉字的osg文件解决方法
- 01-10C#中Socket通信用法实例详解
- 01-10C#装箱和拆箱原理详解
- 01-10C#类的多态性详解
- 01-10C#创建不规则窗体的4种方式详解
- 01-10C#中yield用法使用说明
- 01-10C#中深度复制和浅度复制详解
- 01-10C#语言中的修饰符汇总
阅读排行
本栏相关
- 01-10C#通过反射获取当前工程中所有窗体并
- 01-10关于ASP网页无法打开的解决方案
- 01-10WinForm限制窗体不能移到屏幕外的方法
- 01-10WinForm绘制圆角的方法
- 01-10C#实现txt定位指定行完整实例
- 01-10WinForm实现仿视频 器左下角滚动新
- 01-10C#停止线程的方法
- 01-10C#实现清空回收站的方法
- 01-10C#通过重写Panel改变边框颜色与宽度的
- 01-10C#实现读取注册表监控当前操作系统已
随机阅读
- 01-10SublimeText编译C开发环境设置
- 01-11ajax实现页面的局部加载
- 08-05dedecms(织梦)副栏目数量限制代码修改
- 08-05DEDE织梦data目录下的sessions文件夹有什
- 01-10C#中split用法实例总结
- 04-02jquery与jsp,用jquery
- 01-11Mac OSX 打开原生自带读写NTFS功能(图文
- 01-10delphi制作wav文件的方法
- 01-10使用C语言求解扑克牌的顺子及n个骰子
- 08-05织梦dedecms什么时候用栏目交叉功能?