我有一个解析文件的方法。但是,这种解析可能会随时失败,具体取决于各种条件(例如,不太谨慎的用户使用该文件)。
public string ParseDatFile(string datFile)
{
string[] deezLines = File.ReadAllLines(datFile);
// We're searching for an essential data inside the file.
bool daEssentialDataFound = false;
foreach (string datLine in deezLines)
{
if (datLine.Contains("daEssentialData"))
{
daEssentialDataFound = true;
break;
}
}
if (!daEssentialDataFound)
throw new WhatShouldIThrowException("yo dood where's da essential data in " + datFile + "?");
DoStuffWith(deezLines);
}
我可以在这种情况下使用例外吗?我想过:
答案 0 :(得分:6)
FileFormatException应该没问题:
输入文件或数据流时抛出的异常 应该符合某种文件格式规范 格式错误。
您可以选择提供uri和描述性错误消息。
如果您不想引用WindowsBase
,则可以创建特定于您的格式的自己的例外。基于XmlReader.Read
引发XmlException
的事实。
答案 1 :(得分:1)
我会抛出一个自定义异常,因为这会增加可读性并允许捕获该特定异常:
public class InvalidFileFormatException : System.FormatException
{
public InvalidFileFormatException(string exText) : base(exText) { }
}
// you could even provide an exception if a single line has an invalid format
public class SpecificLineErrorException : InvalidFileFormatException
{
public string Line { get; set; }
public SpecificLineErrorException(string exText, string line) : base(exText)
{
this.Line = line;
}
}
现在你的方法可能看起来像(也有点过分了一点:
public string ParseDatFile(string datFile)
{
string[] deezLines = File.ReadAllLines(datFile);
if(!deezLines.Any(l => l.Contains("daEssentialData")))
throw new InvalidFileFormatException("yo dood where's da essential data in " + datFile + "?");
DoStuffWith(deezLines);
}