好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

详解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 '\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# 不能用于文件名的字符,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对服务器之家网站的支持!

原文链接: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

dy("nrwz");

查看更多关于详解C# 不能用于文件名的字符的详细内容...

  阅读:89次