Принимая ваш код:
string userDir = WindowsIdentity.GetCurrent().Name;
char[] chars = Path.GetInvalidPathChars();
Вы всегда можете сделать:
Array.ForEach(chars, c => userDir = userDir.Replace(c, '_'));
Заменить любой недопустимый символ подчеркиванием (или любым нейтральным символом, который вы хотите ...).
ОБНОВЛЕНИЕ : Как указал Стив Фэллоуз, \
и :
являются допустимыми символами пути, но не действительными символами имени папки.Вместо этого мы должны использовать метод Path.GetInvalidFileNameChars()
:
char[] chars = Path.GetInvalidFileNameChars();
, а затем продолжить, как и раньше.