Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#和#xA0;处理文件错误_C#_Error Handling_File Io - Fatal编程技术网

C#和#xA0;处理文件错误

C#和#xA0;处理文件错误,c#,error-handling,file-io,C#,Error Handling,File Io,我正在尝试打开一个文件,如果文件路径不存在,我希望返回例如X,如果文件无法打开,则返回Y,如果打开成功,则返回Z 但是,我不明白如何检查“文件无法打开”错误,我不确定我的try-catch到目前为止是否正确。我还想添加另一条语句来检查文件是否已打开 public int Opener(string fileName) { string text = ""; try { text = F

我正在尝试打开一个文件,如果文件路径不存在,我希望返回例如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。如果要返回文本错误消息,请将函数返回类型更改为
string

您可以使用此选项检查所描述的情况:

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
    }
}

函数被声明为返回一个
int
,因此需要一个数字,比如-1,0,1。这很有意义。但是如何检查文件是否由于某种原因无法打开?这将被视为Y。如果文件已被另一个进程访问,因此程序无法打开,则会导致
IOException
。访问该文件的进程是您的程序本身还是另一个进程并不重要。好的,我现在明白了。您知道我是否可以使用I0Exception检查文件是否已打开吗?如果是这样的话,我怎么能返回一个不同的值呢?因此,如果文件无法打开,则返回X,如果文件已打开,则返回J。您的意思是程序已打开还是一般已打开?理想情况下两者都是,但在本例中,如果文件已一般打开,则我更感兴趣。我不想返回字符串。这只是为了描述问题。如果你想用文本或语言来描述问题,你有一个字符串!