【问题标题】:C# Handle file errorsC# 处理文件错误
【发布时间】:2020-12-09 14:31:55
【问题描述】:

我正在尝试打开一个文件,我想返回例如X表示文件路径不存在,Y表示文件无法打开,Z表示成功。

但是,我不明白如何检查“文件无法打开”错误,而且我不确定我的 try-catch 是否正确。我还想添加另一个语句来检查文件是否已经打开。

public int Opener(string fileName)
    { 
    string text = "";
        
        try
        {
            text = File.ReadAllText(fileName);
            return "Something to Return";
        }
        catch (FileNotFoundException)
        {
            return "Something to Return";
        }

【问题讨论】:

  • 函数被声明为返回一个int,所以你需要一个数字,比如-1、0、1。

标签: c# error-handling file-io


【解决方案1】:

您可以使用它来检查您描述的案例:

try
{
    string text = File.ReadAllText(fileName);

    //Z: reading was successful
}
catch (Exception ex)
{
    if (ex.InnerException is IOException)
    {
        //Y: file is already being read
    }
    else if (ex.InnerException is FileNotFoundException)
    {
        //X: file does not exist
    }
}

【讨论】:

  • 这是有道理的。但是如何检查文件是否由于某种原因无法打开?
  • 这将被视为 YIOException 如果文件已被另一个进程访问,因此无法被您的程序打开,则会导致该文件。访问文件的进程是您的程序本身还是另一个进程都没有关系。
  • 好的,我现在明白了。你知道我是否可以使用 I0Exception 检查文件是否已经打开?如果是这样的话,我怎么能返回一个不同的值呢?因此,如果文件无法打开,则返回 X,如果文件已经打开,则返回 J。
  • 你的意思是已经被你的程序打开了还是一般已经打开了?
  • 理想情况下两者都是,但在这种情况下,如果文件通常已经打开,我会更感兴趣。
【解决方案2】:

函数被声明为返回int,因此您需要一个数字,例如-1、0 或1。如果您想返回文本错误消息,请将函数返回类型更改为string

【讨论】:

  • 我不想返回一个字符串。只是为了描述问题。
  • 如果你想用文字或语言来描述问题,你有一个字符串!
猜你喜欢
  • 1970-01-01
  • 2018-05-20
  • 1970-01-01
  • 2010-11-12
  • 1970-01-01
  • 2013-05-12
  • 2013-10-17
  • 1970-01-01
  • 2018-04-21
相关资源
最近更新 更多