从FileName(或目录,文件夹,文件)中删除无效(不允许,错误)字符

时间:2010-02-09 16:52:31

标签: c# asp.net .net

我已经写了这个小方法来实现subj中的目标,但是,有更高效(更简单)的方法吗?我希望这可以帮助那些像我一样搜索这个的人。

var fileName = new System.Text.StringBuilder();
fileName.Append("*Bad/\ :, Filename,? ");
// get rid of invalid chars
while (fileName.ToString().IndexOfAny(System.IO.Path.GetInvalidFileNameChars()) > -1)
{
    fileName = fileName.Remove(fileName.ToString().IndexOfAny(System.IO.Path.GetInvalidFileNameChars()), 1);
}

4 个答案:

答案 0 :(得分:87)

我知道这已经有几年了,但这是另一个供参考的解决方案。

public string GetSafeFilename(string filename)
{

    return string.Join("_", filename.Split(Path.GetInvalidFileNameChars()));

}

答案 1 :(得分:15)

尝试以下

public string MakeValidFileName(string name) {
  var builder = new StringBuilder();
  var invalid = System.IO.Path.GetInvalidFileNameChars();
  foreach ( var cur in name ) {
    if ( !invalid.Contains(cur) ) {
      builder.Append(cur);
    }
  }
  return builder.ToString();
}

答案 2 :(得分:13)

与.NET 4兼容的不同方法。请参阅上面的解释需求的评论。

public static string ScrubFileName(string value)
{
   var sb = new StringBuilder(value);
   foreach (char item in Path.GetInvalidFileNameChars())
   {
      sb.Replace(item.ToString(), "");
   }
   return sb.ToString();
}

答案 3 :(得分:-1)

如果你说简单的话,你会寻找“简洁”:

public string StripInvalidChars(string filename) {
  return new String(
    filename.Except(System.IO.Path.GetInvalidFileNameChars()).ToArray()
  );
}

那就是说,我会选择JaredPar的解决方案。它可能更容易阅读(取决于品味,背景),我的直觉是它更有效率(虽然我不确定你是否有效率从有限长度的文件名中删除十几个无效字符)和他的使用一个StringBuilder()似乎完全适合你的例子。