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

Sim*_*mon 12 .net exception-handling

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

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

xcu*_*cud 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);
    }
}
Run Code Online (Sandbox Code Playgroud)

...

throw new InvalidFileTypeException("foo.txt", "*.csv");
Run Code Online (Sandbox Code Playgroud)


Bri*_*sen 10

ArgumentException符合IMO法案.


Ada*_*ght 8

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


AMi*_*ico 5

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

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

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

我会留下文档中描述的ArgumentException,path是一个空字符串("")."

选择异常的正确类型扔http://msdn.microsoft.com/en-us/library/ms229021.aspx.

  • 不,不正确(但有效)的扩展不是 IOExcpetion。在这个层面上这是一个被打破的约束。 (2认同)