Show / Hide Table of Contents

MSDN.WhiteKnight - Stack Overflow answers

Ответ на "Как проверить корректность имени создаваемого файла?"

Answer 703222

Link

как-то так

/// <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.

Back to top Stack Overflow answers (published from sources in GitHub repository). Copyright (c) 2020, MSDN.WhiteKnight. Content licensed under BSD 3-Clause License.
Generated by DocFX