代码之家  ›  专栏  ›  技术社区  ›  Ruslan

从文件名(或目录、文件夹、文件)中删除无效(不允许,错误)字符[重复]

  •  18
  • Ruslan  · 技术社区  · 14 年前

    我已经写了这个小方法来实现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 回复  |  直到 10 年前
        1
  •  15
  •   JaredPar    14 年前

    尝试以下操作

    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
  •  86
  •   Ceres    12 年前

    我知道这是几年前的事,但这里有另一个解决方案供参考。

    public string GetSafeFilename(string filename)
    {
    
        return string.Join("_", filename.Split(Path.GetInvalidFileNameChars()));
    
    }
    
        3
  •  13
  •   Roland Schaer    10 年前

    与.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();
    }
    
        4
  •  -1
  •   Benjamin Podszun    14 年前

    当你说简单的时候,如果你想找“简洁”的话:

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

    也就是说,我同意贾雷德帕的解决方案。它可能更容易阅读(取决于味道和背景),我的直觉是它更有效(尽管我不确定从有限长度的文件名中剥离出这十几个无效字符有多有效),而且他对StringBuilder()的使用似乎非常适合您的示例。