0);if (replaceIndex == -1) return arbitraryString;var r = n

时间:2022-06-12 01:52:30

在 Windows 有一些字符是不能作为文件名,测验考试重定名一个文件,输入/ 就可以看到windows 提示的不能作为文件名的字符

0);if (replaceIndex == -1) return arbitraryString;var r = n

那么具体是包孕哪些标记不能作为文件名?

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 国际许可协议进行许可。欢迎转载、使用、从头颁布,但务必保存文章署名林德熙(包罗链接: ),不得用于商业目的,基于本文改削后的作品务必以不异的许可颁布。如有任何疑问,请与我。

标签:

原文地点:https://www.cnblogs.com/lindexi/p/8970466.html