在 Windows 有一些字符是不能做爲文件名,嘗試重命名一個文件,輸入/
就能夠看到windows 提示的不能做爲文件名的字符git
<!--more-->c#
<div id="toc"></div>windows
那麼具體是包括哪些符號不能做爲文件名?ide
- Tilde (
~
) - Number sign (
#
) - Percent (
%
) - Ampersand (
&
) - Asterisk (
*
) - Braces (
{
}
) - Backslash (\)
- Colon (
:
) - Angle brackets (
<
>
) - Question mark (
?
) - Slash (
/
) - Plus sign (
+
) - Pipe (
|
) - Quotation mark (
"
)
上面這些字符不能用來文件名和文件夾名函數
並且在 windows 的要求,文件是須要有文件名的,雖然你也能夠建立.file
這樣的文件,可是用戶是難以本身輸入這樣的文件名。ui
以外還有一些文件名是保留,不能建立這樣的文件名.net
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會說不能把文件命名code
那麼是否是把這些字符串拿出來判斷?實際上微軟已經作了這個了,由於在不一樣的系統,可能以後會添加新的字符串,因此最好不要本身寫。orm
可使用微軟給的函數System.IO.Path.GetInvalidFileNameChars
,下面的代碼能夠直接使用blog
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 大神寫的
c# - How to make a valid Windows filename from an arbitrary string
我搭建了本身的博客 https://lindexi.gitee.io/ 歡迎你們訪問,裏面有不少新的博客。只有在我看到博客寫成熟以後纔會放在csdn或博客園,可是一旦發佈了就再也不更新
若是在博客看到有任何不懂的,歡迎交流,我搭建了 dotnet 職業技術學院 歡迎你們加入
<a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/4.0/"><img alt="知識共享許可協議" style="border-width:0" src="https://licensebuttons.net/l/by-nc-sa/4.0/88x31.png" /></a><br />本做品採用<a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/4.0/">知識共享署名-非商業性使用-相同方式共享 4.0 國際許可協議</a>進行許可。歡迎轉載、使用、從新發布,但務必保留文章署名林德熙(包含連接:http://blog.csdn.net/lindexi_gd ),不得用於商業目的,基於本文修改後的做品務必以相同的許可發佈。若有任何疑問,請與我聯繫。