Как проверить корректность имени создаваемого файла?
1,00
р.
р.
Есть строка, в которой пользователь указал имя создаваемого файла. Есть необходимость проверить корректность имени. Если есть недопустимые символы, то заменить их, к примеру на "_". try не подходит, т.к. причин исключений при создании файла много (нет места на жестком диске, нет прав на создание в данной директории и т.д.). Подскажите, как проверить корректность имени?
Ответ как-то так /// /// Проверка корректности имени файла /// /// Проверяемое имя public static bool ValidateFileName(string name) { try { FileStream fs = File.Open(name, FileMode.Open) if (fs != null) fs.Close() } catch (ArgumentException) { return false //имя файла введено некорректно } catch (FileNotFoundException) { return true //имя файла введено корректно, но файл не существует } catch (IOException) { return true //имя файла введено корректно, но файл недоступен } return true //имя файла введено корректно } /// /// Проверка корректности имени файла с предложением исправленного имени /// /// Проверяемое имя /// Предлагаемое исправленное имя public static bool ValidateFileName(string name,out string corrected_name) { try { FileStream fs = File.Open(name, FileMode.Open) if (fs != null) fs.Close() } catch (ArgumentException)//имя файла введено некорректно { //пытаемся исправить имя char[] banned = System.IO.Path.GetInvalidFileNameChars() StringBuilder sb = new StringBuilder() foreach (char c in name) { if (banned.Contains(c)) sb.Append('_') else sb.Append(c) } if (ValidateFileName(sb.ToString()) != false) { //удалось исправить имя corrected_name = sb.ToString() } else corrected_name = "" //не удалось исправить имя (видимо это зарезервированное имя типа CON) return false } catch (FileNotFoundException) { corrected_name = "" return true //имя файла введено корректно, но файл не существует } catch (IOException) { corrected_name = "" return true //имя файла введено корректно, но файл недоступен } corrected_name = "" return true //имя файла введено корректно } Но на самом деле, в настольных приложениях лучше так не делать, а использовать для ввода имени SaveFileDialog с включенной проверкой корректности. Так что это в основном для служб или веб-приложений.