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

Гро*_*ный 19 .net c# asp.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);
}
Run Code Online (Sandbox Code Playgroud)

Cer*_*res 96

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

public string GetSafeFilename(string filename)
{

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

}
Run Code Online (Sandbox Code Playgroud)

  • 几年后,无论如何,这是一个非常聪明的解决方案。截至 2014 年,我仍然会使用它,而不是 Regex.Replace。=D (2认同)
  • @Rob`GetInvalidFileNameChars()`确实包含'\'和'/'。此例程假定您仅传递文件名。如果您正在检查文件路径的一部分,则可以使用`Path.GetInvalidPathChars()`。 (2认同)

Jar*_*Par 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();
}
Run Code Online (Sandbox Code Playgroud)

  • invalid.Contains(cur)似乎在.NET 4中对我不起作用.收到消息"无法在此处访问私有方法".想出了下面发布的另一个例子. (2认同)

Rol*_*aer 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();
}
Run Code Online (Sandbox Code Playgroud)