Удалить недопустимые (запрещенные, плохие) символы из FileName (или Directory, Folder, File)
Я написал этот небольшой метод для достижения цели в 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 ответа
Попробуйте следующее
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 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();
}
Если вы ищете "краткий", когда говорите просто:
public string StripInvalidChars(string filename) {
return new String(
filename.Except(System.IO.Path.GetInvalidFileNameChars()).ToArray()
);
}
Тем не менее, я бы пошел с решением JaredPar. Это, вероятно, легче читать (в зависимости от вкуса, фона), мое внутреннее чувство таково, что оно более эффективно (хотя я не уверен, насколько эффективно вы должны удалять десятки недопустимых символов из файла с ограниченной длиной) и его использование StringBuilder(), кажется, идеально подходит для вашего примера.