繁体   English   中英

无法删除C#中的文件-未经授权的访问异常

[英]Can't delete a file in C# - unauthorized access exception

在我的ASP.Net Web应用程序中,我已经在HTML 5画布上加载了一个图像,并允许用户在图像上绘制一些图形(矩形框)。 用户在图像上完成绘图后,我必须将图像以相同的名称保存到服务器的相同位置。

我正在使用AJAX将图像数据传输到服务器。 这部分已成功完成。 在服务器代码中,首先,我尝试删除一个文件,然后在相同位置创建一个具有相同名称的新文件。

因此,当我删除文件时,它正在引发UnAuthorizedAccessException is handled by user code Access to the path 'D:\\vs-2010projects\\delete_sample\\delete_sample\\myimages\\page_1.png' is denied.

这是我的服务器端C#代码...

[WebMethod()]
public static void UploadImage(string imageData)
{
    byte[] data = Convert.FromBase64String(imageData);
    if(File.Exists("D:\\vs-2010projects\\delete_sample\\delete_sample\\myimages\\page_1.png"))
    {
        File.Delete("D:\\vs-2010projects\\delete_sample\\delete_sample\\myimages\\page_1.png");
    }

    FileStream fs = new FileStream("D:\\vs-2010projects\\delete_sample\\delete_sample\\myimages\\page_1.png", FileMode.Create);
    BinaryWriter bw = new BinaryWriter(fs);
    bw.Write(data);
    bw.Close();
}//UploadImage

有什么办法可以删除文件吗?

请引导我解决此问题。

首先,您应该将流语句打包到using子句中,该子句将自动处理dispose操作(即使发生异常)-在调试来自未关闭流的奇怪问题时,它将为您节省大量时间

using(var fs = new FileStream(...)) 
{
  using(var bw = new BinaryWriter(fs)
  {
       bw.Write(data);
  }
}

现在,通常会出现异常,因为您当前的进程没有文件访问权限(无法删除文件)-解决该问题

  • 为您的用户添加完整权限

您可以通过在Windows资源管理器中找到文件,检查其属性,然后在“安全性”选项卡下找到特定的权限来执行此操作。

例如,如果您将页面托管在IIS上,则该页面将被标识为应用程序池标识,即IIS_IUSRS或NETWORK SERVICE,并且通常不信任这些参与方(或信任程度不足以删除文件0)

我认为,这与特权有关。 当用户尝试连接到您的网站时,IIS会将连接分配给IUSER_ComputerName帐户,该帐户属于来宾组。 该组具有安全限制。 尝试提升对IUSER_ComputerName的访问。 在这里可以找到更多

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM