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

我已经写了这个小方法来实现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); } 

请尝试以下方法

 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(); } 

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

 public string GetSafeFilename(string filename) { return string.Join("_", filename.Split(Path.GetInvalidFileNameChars())); } 

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

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

当你说简单时,如果你寻找“简洁”:

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

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