Мне нужно обработать некоторые пути к файлам в C #, которые могут содержать недопустимые символы, например:
C:\path\something\output_at_13:26:43.txt
в этом пути, :
s в отметке времени делают имя файла недействительным, и я хочузаменить их другим безопасным символом.
Я искал здесь решения для SO, но, похоже, все они основаны на чем-то вроде:
path = string.Join("_", path.Split(Path.GetInvalidFileNameChars()));
или похожих решениях.Эти решения, однако, не являются хорошими, потому что они портят букву диска, и я получаю вывод:
C_\path\something\output_at_13_26_43.txt
Я пытался использовать Path.GetInvalidPathChars()
, но он все еще не работает, потому что он не работаетвключите :
в недопустимые символы, чтобы он не заменял символы в имени файла.
Итак, выяснив это, я попытался сделать следующее:
string dir = Path.GetDirectoryName(path);
string file = Path.GetFileName(path);
file = string.Join(replacement, file.Split(Path.GetInvalidFileNameChars()));
dir = string.Join(replacement, dir.Split(Path.GetInvalidPathChars()));
path = Path.Combine(dir, file);
, ноэто тоже нехорошо, потому что :
s в имени файла, кажется, мешают логике Path.GetFilename()
, и он возвращает только последний фрагмент после последнего :
, поэтому я теряю части пути.
Как мне сделать это "правильно" без хакерских решений?