文件一直在使用,直到客户端刷新页面为止



我正在尝试从服务器文件系统删除图像文件,但是我会从其他过程中获得一个'文件中的文件'错误。我正在尝试删除图像,并且它是一个禽类的缩略图。我可以删除一个,但据我所知,另一个会尝试永远失败。但是,如果我在循环键入时刷新页面时,该操作会立即成功。加载页面时,我正在通过AJAX请求和API控制器(我的网站主要是一个页面(访问文件,但是我正在使用"使用"语句。使用后应该关闭手柄,但似乎保持开放。我必须将文件放在客户端,才能可以选择删除它们(浏览器内容管理器(,因此我看不出它们仍在使用。我加载缩略图并使用它的ID从数据库中获取其名称,并使用名称在文件系统中找到它。

我尝试将一个try-catch放在循环中,并等待最后一个过程完成,但是直到我刷新页面之前,它永远不会做。我还尝试使用单独的AJAX请求一次删除一个,但是如果我完全打开文件,我无法删除它(直到我刷新页面(。

删除文件的代码(方法1(:

public static void DeleteFromFileSystem(string path)
{
     for (int i = 1; i <= 10000; ++i)
         {
         try
         {
             System.IO.File.Delete(path);
             break;
         }
         catch (IOException e) when (i <= 10000)
         {
             Thread.Sleep(3);
         }
    }
}

删除文件的代码(方法2(:

public static void DeleteFromFileSystem(string path)
{
     using(FileStream f = System.IO.File.OpenWrite(path))
     {
          System.IO.File.Delete(path);
     }
}

获得图像的代码(正常工作,但可能是问题(:

public static byte[] ImageToByte(string name, bool getThumbnail)
{
    if (name == null) name = "user.png"; //default profile picture
    string path = getThumbnail ? "wwwroot/ImgThumb/" : "wwwroot/ImgFull/";
    // this line is my best suspect
    System.Drawing.Image img = System.Drawing.Image.FromFile(path + name);
    byte[] b;
    using (MemoryStream mStream = new MemoryStream())
    {
         img.Save(mStream, img.RawFormat);
         b = mStream.ToArray();
         mStream.Close(); // I added this as a precautionary. It didn't help.
    }
    return b;
}

我希望这些图像被删除,但是我无法访问'文件x,因为它正在通过另一个过程'错误使用。

已解决 - 我在使用语句之后添加了 img.Dispose()

相关内容

  • 没有找到相关文章

最新更新