C# 不能用于文件名的字符
2021-04-13 23:28
标签:win you site 使用 character 商业 == append 不能 在 Windows 有一些字符是不能作为文件名,尝试重命名一个文件,输入 那么具体是包括哪些符号不能作为文件名? 上面这些字符不能用来文件名和文件夹名 而且在 windows 的要求,文件是需要有文件名的,虽然你也可以创建 之外还有一些文件名是保留,不能创建这样的文件名 尝试新建一个文本,然后把他文件名命名为上面的任意一个,基本windows会说不能把文件命名 那么是不是把这些字符串拿出来判断?实际上微软已经做了这个了,因为在不同的系统,可能之后会添加新的字符串,所以最好不要自己写。 可以使用微软给的函数 如果确实需要显示文件名,请使用下面代码 上面的代码是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 职业技术学院 欢迎大家加入 C# 不能用于文件名的字符 标签:win you site 使用 character 商业 == append 不能 原文地址:https://www.cnblogs.com/lindexi/p/8970466.html/
就可以看到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.
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(‘\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();
}
本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。欢迎转载、使用、重新发布,但务必保留文章署名林德熙(包含链接:http://blog.csdn.net/lindexi_gd ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请与我联系。