对于无效的文件名,应该抛出哪个异常?

时间:2009-09-14 13:36:08

标签: .net exception-handling

我有一个接受文件名作为参数的方法,所有文件名都应以'.csv'结尾。如果传递不以.csv结尾的文件名,我应该抛出哪个异常?

或者我应该采取不同的方法?

6 个答案:

答案 0 :(得分:16)

ArgumentOutOfRangeException - 您所描述的内容符合超出范围的异常:

  

当抛出异常时   参数的值在...之外   允许的值范围   通过调用的方法。

ArgumentException用于验证路径字符串中的字符而不是文件类型。

  

path参数是零长度   字符串,仅包含空格,或   包含一个或多个无效   字符。

恕我直言,路径验证通过图表如下所示:

如果这对您来说不够具有描述性,那么请创建自己的异常类:

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");

答案 1 :(得分:10)

ArgumentException符合IMO法案。

答案 2 :(得分:8)

我可能会使用ArgumentException,因为它是“当提供给方法的其中一个参数无效时抛出的异常”

答案 3 :(得分:5)

检查框架中现有IO方法的文档。它描述了方法生成的异常。例如,在StreamWriter.StreamWriter(String, Boolean, Encoding, Int32) Constructor处查看http://msdn.microsoft.com/en-us/library/0wf7ab94(VS.85).aspx。我建议你保持一致的例外是 IOException 。然后,您可以添加描述详细信息的自定义消息。

IOException - path包含文件名,目录名或卷标语法的错误或无效语法。

在您的情况下,文件扩展名不正确,因此请告诉用户,如Throw New IOException("Invalid file extension.")

我会按照文档中的描述留下 ArgumentException path是一个空字符串(“”)。

请参阅Choosing the Right Type of Exception to Throw上的http://msdn.microsoft.com/en-us/library/ms229021.aspx

答案 4 :(得分:1)

System.ArgumentException似乎是直接的,或者作为您的例外的基类。

答案 5 :(得分:1)

如何创建自己的InvalidFilenameException呢?例如:

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

    public InvalidFilenameException(string message, string invalidFilename)
        :base(message)
    {
        Filename = invalidFilename;
    }
}