我是靠谱客的博主 甜甜机器猫,最近开发中收集的这篇文章主要介绍详解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 '':
   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# 不能用于文件名的字符,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对靠谱客网站的支持!

最后

以上就是甜甜机器猫为你收集整理的详解C# 不能用于文件名的字符的全部内容,希望文章能够帮你解决详解C# 不能用于文件名的字符所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(101)

评论列表共有 0 条评论

立即
投稿
返回
顶部