您好,登錄后才能下訂單哦!
這篇文章主要介紹了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# 不能用于文件名的字符怎么辦”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,更多相關知識等著你來學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。