欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

详解C# 不能用于文件名的字符

程序员文章站 2023-12-16 23:19:46
在 windows 有一些字符是不能作为文件名,尝试重命名一个文件,输入/ 就可以看到windows 提示的不能作为文件名的字符 那么具体是包括哪些符号不能作为文件名...

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

详解C# 不能用于文件名的字符

那么具体是包括哪些符号不能作为文件名?

  • 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# 不能用于文件名的字符,希望对大家有所帮助

上一篇:

下一篇: