Какое исключение должно быть выдано для недопустимого имени файла?

Ни один из них не отвечает, указывают на важное различие об этих двух операциях. Таблица отбрасывания является операцией, которая может откатываться. <забастовка> Однако усекает, не может откатываться ['TRUNCATE TABLE' может откатываться также]. Таким образом отбрасывание очень большой таблицы может быть очень дорогим, если существует много строк, потому что они все должны быть зарегистрированы во временном пространстве в случае, если Вы решаете откатывать его.

Обычно, если я хочу избавиться от большой таблицы, я усеку ее, затем отброшу ее. Таким образом, данные будут отклонены без записи, и таблица может быть отброшена, и то отбрасывание будет очень недорого, потому что никакие данные не должны быть зарегистрированы.

важно указать, хотя это усекает, просто удаляет данные, вставая из-за стола, в то время как отбрасывание, на самом деле, удалит данные и саму таблицу. (принимающий внешние ключи не устраняют такое действие)

12
задан Simon 14 September 2009 в 13:36
поделиться

6 ответов

ArgumentOutOfRangeException - То, что вы описываете, соответствует исключению вне диапазона:

Исключение, которое выдается, когда значение аргумента находится за пределами допустимый диапазон значений, как определено вызываемым методом.

ArgumentException используется для проверки символов в строке пути, а не типа файла.

Параметр пути имеет нулевую длину строка, содержащая только пробел, или содержит один или несколько недопустимых

ИМХО, диаграмма провала проверки пути выглядит так:

Если это недостаточно для вас, создайте собственный класс исключения:

public class InvalidFileTypeException : System.IO.IOException
{
    public InvalidFileTypeException(string path, string acceptedTypeMask) 
    {
        this.Message = string.Format(
            "File type '{0}' does not fall within the expected range: '{1}'", 
            path, 
            acceptedTypeMask);
    }
}

...

throw new InvalidFileTypeException("foo.txt", "*.csv");
16
ответ дан 2 December 2019 в 03:38
поделиться

ArgumentException соответствовало бы закону IMO.

10
ответ дан 2 December 2019 в 03:38
поделиться

Я бы, вероятно, использовал ArgumentException , так как это «исключение, которое выдается, когда один из аргументов, предоставленных методу, недействителен»

8
ответ дан 2 December 2019 в 03:38
поделиться

Проверьте документацию по существующему методу ввода-вывода в Framework. Он описывает исключения, генерируемые методом. Например, проверьте StreamWriter.StreamWriter (String, Boolean, Encoding, Int32) Constructor на http://msdn.microsoft.com/en-us/library/0wf7ab94 (VS.85). aspx . Исключение, которое я предлагаю вам использовать, чтобы оставаться последовательным, - это IOException . Затем вы можете добавить собственное сообщение с описанием деталей.

IOException - путь включает неправильный или недопустимый синтаксис для имени файла, имени каталога или синтаксиса метки тома.

В вашем случае расширение файла неверно, поэтому сообщить пользователю, как в Throw New IOException («Недопустимое расширение файла.») .

Я бы оставил ArgumentException , как описано в документации,

5
ответ дан 2 December 2019 в 03:38
поделиться

System.ArgumentException кажется подходящим, либо напрямую, либо как базовый класс для вашего исключения.

1
ответ дан 2 December 2019 в 03:38
поделиться

Как насчет создания собственного InvalidFilenameException ? Например:

public class InvalidFilenameException : Exception
{
    public string Filename { get; private set; }

    public InvalidFilenameException(string message, string invalidFilename)
        :base(message)
    {
        Filename = invalidFilename;
    }
}
1
ответ дан 2 December 2019 в 03:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: