我正在尝试从服务器文件系统中删除图像文件,但出现“文件正在被另一个进程使用”错误。我正在尝试删除图像,并一口气删除了相关的缩略图。据我所知,我可以删除一个,但另一个会尝试永远失败。但是,如果我在通过 try-catch 循环时刷新页面,操作会立即成功。当我加载页面时,我正在通过 ajax 请求和 API 控制器(我的网站主要是一页)访问文件,但我是通过“使用”语句来访问的。这应该在使用后关闭手柄,但它似乎保持打开状态。我必须在客户端获取文件才能选择删除它们(浏览器内容管理器),所以我看不到它们仍在使用中。我加载缩略图并使用它'
我曾尝试将 try-catch 放入循环中并等待最后一个进程完成,但它永远不会完成,直到我刷新页面。我还尝试使用单独的 ajax 请求一次删除一个,但似乎如果我已经打开了一个文件,我无法删除它(直到我刷新页面)。
删除文件的代码(方法一):
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);
}
}
}
删除文件的代码(方法二):
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 无法访问,因为它正在被另一个进程使用”错误。