Как сделать правильное имя файла Windows из произвольной строки? - PullRequest
82 голосов
/ 07 марта 2009

У меня есть строка типа «Foo: Bar», которую я хочу использовать в качестве имени файла, но в Windows символ «:» не допускается в имени файла.

Есть ли метод, который превратит "Foo: Bar" в нечто вроде "Foo-Bar"?

Ответы [ 12 ]

0 голосов
/ 01 августа 2013

Мне нужно было сделать это сегодня ... в моем случае мне нужно было объединить имя клиента с датой и временем для окончательного файла .kmz. Мое окончательное решение было таким:

 string name = "Whatever name with valid/invalid chars";
 char[] invalid = System.IO.Path.GetInvalidFileNameChars();
 string validFileName = string.Join(string.Empty,
                            string.Format("{0}.{1:G}.kmz", name, DateTime.Now)
                            .ToCharArray().Select(o => o.In(invalid) ? '_' : o));

Вы даже можете заменить его пробелами, если добавите символ пробела в недопустимый массив.

Может быть, это не самый быстрый, но, поскольку производительность не была проблемой, я нашел ее элегантной и понятной.

Ура!

0 голосов
/ 11 декабря 2010

Вы можете сделать это с помощью команды sed:

 sed -e "
 s/[?()\[\]=+<>:;©®”,*|]/_/g
 s/"$'\t'"/ /g
 s/–/-/g
 s/\"/_/g
 s/[[:cntrl:]]/_/g"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...