删除文件时无法尝试捕获

时间:2017-09-12 06:42:18

标签: c# winforms

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

  

类型'System.UnauthorizedAccessException'的第一次机会异常   发生在mscorlib.dll

     

附加信息:访问路径'H:\ J \ R \ sound.MP4'是   拒绝。

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

}

3 个答案:

答案 0 :(得分:1)

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
   }

}

答案 1 :(得分:1)

我按照@Keyur PATEL的建议读了这个article,并且弄清楚这是Visual Studio的配置,我通过执行以下操作解决了这个问题:

  • 导航至"调试/例外/公共语言运行时例外/系统"
  • 向下滚动到" NullReferenceException"是,并取消选中" throw"复选框,然后选中"用户处理"。

感谢您的帮助

答案 2 :(得分:0)

用户(其帐户用于运行您的应用程序)必须能够访问该路径

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

  1. 为您的应用程序配置一个特殊的应用程序池,该应用程序池将在具有必要权限的用户下运行(可以访问远程服务器上的管理员共享)。因此,您的整个应用程序将在该帐户下运行并拥有其所有权限。
  2. 使用模拟在其他帐户下执行部分代码。这不需要任何IIS配置,并且比第一种方式更安全和灵活(例如,您可以在单个应用程序中模拟多个帐户)。