MSDN.WhiteKnight - Stack Overflow answers
Ответ на "Как проверить корректность имени создаваемого файла?"
Answer 703222
как-то так
/// <summary> /// Проверка корректности имени файла /// </summary> /// <param name="name">Проверяемое имя</param> 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;//имя файла введено корректно } /// <summary> /// Проверка корректности имени файла с предложением исправленного имени /// </summary> /// <param name="name">Проверяемое имя</param> /// <param name="corrected_name">Предлагаемое исправленное имя</param> 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 с включенной проверкой корректности. Так что это в основном для служб или веб-приложений.
Content is retrieved from StackExchange API.
Auto-generated by ruso-archive tools.