C# 删除文件时无法尝试捕获

C# 删除文件时无法尝试捕获,c#,winforms,C#,Winforms,我想删除一个文件,以防它被另一个进程锁定,即使我已经设置了try catch,但程序仍然是fi.delete()的暗现金,所以如何修复它 “System.UnauthorizedAccessException”类型的首次意外异常 发生在mscorlib.dll中 其他信息:无法访问路径“H:\J\R\sound.MP4” 否认 其帐户用于运行应用程序的用户必须具有该路径的访问权限 有两种方法可以实现这一点: 为您的应用程序配置一个特殊的应用程序池,该应用程序将在具有必要权限(可以访问远程服务器上

我想删除一个文件,以防它被另一个进程锁定,即使我已经设置了try catch,但程序仍然是fi.delete()的暗现金,所以如何修复它

“System.UnauthorizedAccessException”类型的首次意外异常 发生在mscorlib.dll中

其他信息:无法访问路径“H:\J\R\sound.MP4” 否认


其帐户用于运行应用程序的用户必须具有该路径的访问权限

有两种方法可以实现这一点:

  • 为您的应用程序配置一个特殊的应用程序池,该应用程序将在具有必要权限(可以访问远程服务器上的管理员共享)的用户下运行。因此,您的整个应用程序将在该帐户下运行,并拥有其所有权限
  • 使用模拟在另一个帐户下执行部分代码。这不需要任何IIS配置,并且比第一种方式更安全、更灵活(例如,您可以在单个应用程序中模拟多个帐户)
  • 正如@Keyur PATEL所建议的那样,我阅读了这篇文章,发现这是VisualStudio的一种配置,我通过执行以下操作解决了它:

    • 导航到“调试/异常/公共语言运行时异常/系统”
    • 向下滚动到“NullReferenceException”所在的位置,取消选中“throw”复选框,然后选中“user handled”

    感谢您的帮助

    为什么要使用两个catch块?阅读,它描述了第一次出现的异常。您可以从Windows中删除该文件吗?@SalihKaragoz:我复制错误,编辑请尝试捕获所有异常:
    catch(Exception ex)
    并检查stacktrace
    MessageBox.Show(例如ToString())它说什么?可能是引发了与未经授权的DaccessException不同的异常
    
    private void GView_CellContentDoubleClick(object sender, DataGridViewCellEventArgs e)
    {
    
        try
        {
            string cellValue = GView.Rows[e.RowIndex].Cells["NAME"].Value.ToString();
    
            var confirmResult = MessageBox.Show("delete this item " + cellValue,
                                             "Confirm Delete!!",
                                              MessageBoxButtons.YesNo);
            if (confirmResult == DialogResult.Yes)
            {
                System.IO.FileInfo fi = new System.IO.FileInfo(cellValue);
                fi.Delete();
            }
            else
            {
    
            }
        }
        catch (UnauthorizedAccessException ex)
        {
            MessageBox.Show(ex.Message);
        }
    
    }
    
    private void GView_CellContentDoubleClick(object sender, DataGridViewCellEventArgs e)
    {
    
        try
        {
            string cellValue = GView.Rows[e.RowIndex].Cells["NAME"].Value.ToString();
    
            var confirmResult = MessageBox.Show("delete this item " + cellValue,
                                             "Confirm Delete!!",
                                              MessageBoxButtons.YesNo);
            if (confirmResult == DialogResult.Yes)
            {
                System.IO.FileInfo fi = new System.IO.FileInfo(cellValue);
                fi.Delete();
            }
            else
            {
    
            }
        }
        catch(System.IO.IOException)
        {
         // exception when file is in use or any other
        }
        catch (UnauthorizedAccessException ex)
        {
            MessageBox.Show(ex.Message);
        }
       catch(Exception ex)
       {
        // all other
       }
    
    }