C# 在特定情况下处理一般异常

C# 在特定情况下处理一般异常,c#,exception,exception-handling,C#,Exception,Exception Handling,我试图通过ftp将文件从a移动到B,如下所示: ftpClient.Rename(sourcePathName, targetPathName); 我想捕获并处理当必须移动的文件找不到时发生的所有异常。但是Rename抛出值为{“未找到文件/目录”}的通用异常FtpCommandException。不幸的是,在其他一些情况下会引发此异常 我不认为比较异常值是一种干净的方法,比如: if("file/directory not found".equals(exception.value)) ..

我试图通过ftp将文件从a移动到B,如下所示:

ftpClient.Rename(sourcePathName, targetPathName);
我想捕获并处理当必须移动的文件找不到时发生的所有异常。但是
Rename
抛出值为
{“未找到文件/目录”}
的通用异常
FtpCommandException
。不幸的是,在其他一些情况下会引发此异常

我不认为比较异常值是一种干净的方法,比如:

if("file/directory not found".equals(exception.value)) ...
从C#6开始,您可以使用异常过滤

try
{
    // your code
}
catch(FtpCommandException ex) 
       when (ex.Value == "file/directory not found")
{
   // do something with this exception
}
在C#6之前,您唯一的选择是捕获内的条件:

try
{
    // your code
}
catch(FtpCommandException ex) 
{
   if(ex.Value == "file/directory not found")
   {
       // do something with this exception
   }
}

在尝试重命名之前,您可能应该检查文件是否存在:

if (ftpClient.FileExists(sourcePathName)){
    ftpClient.Rename(sourcePathName, targetPathName);
}

如果您的异常需要以不同的方式处理,您能否使用自己的try/catch块将重命名代码拆分为自己的函数?