在 windows 有一些字符是不能作為文件名,嘗試重命名一個(gè)文件,輸入/ 就可以看到windows 提示的不能作為文件名的字符
那么具體是包括哪些符號(hào)不能作為文件名?
- tilde (~)
- number sign (#)
- percent (%)
- ampersand (&)
- asterisk (*)
- braces ({ })
- backslash (\)
- colon (:)
- angle brackets (< >)
- question mark (?)
- slash (/)
- plus sign (+)
- pipe (|)
- quotation mark (")
上面這些字符不能用來文件名和文件夾名
而且在 windows 的要求,文件是需要有文件名的,雖然你也可以創(chuàng)建.file這樣的文件,但是用戶是難以自己輸入這樣的文件名。
之外還有一些文件名是保留,不能創(chuàng)建這樣的文件名
1
2
3
|
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. |
嘗試新建一個(gè)文本,然后把他文件名命名為上面的任意一個(gè),基本windows會(huì)說不能把文件命名
那么是不是把這些字符串拿出來判斷?實(shí)際上微軟已經(jīng)做了這個(gè)了,因?yàn)樵诓煌南到y(tǒng),可能之后會(huì)添加新的字符串,所以最好不要自己寫。
可以使用微軟給的函數(shù)system.io.path.getinvalidfilenamechars ,下面的代碼可以直接使用
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
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(); } |
如果確實(shí)需要顯示文件名,請使用下面代碼
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
|
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(); } |
總結(jié)
以上所述是小編給大家介紹的c# 不能用于文件名的字符,希望對(duì)大家有所幫助,如果大家有任何疑問請給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)服務(wù)器之家網(wǎng)站的支持!
原文鏈接:https://lindexi.oschina.io/lindexi/post/C-%E4%B8%8D%E8%83%BD%E7%94%A8%E4%BA%8E%E6%96%87%E4%BB%B6%E5%90%8D%E7%9A%84%E5%AD%97%E7%AC%A6.html