【问题标题】:deleting the file (FileInfo) in asp.net在 asp.net 中删除文件(FileInfo)
【发布时间】:2009-09-11 17:35:12
【问题描述】:

在我的页面中。当我上传图片时,我做了图片管理。之后我想删除原始图像,但我收到文件已经在使用的错误,如下所示 (该进程无法访问文件 'D:\sasiweb\myimage\Images\jalsa.jpeg',因为它正被另一个进程使用。)

这是我的代码

protected void sizeManage(字符串文件名) {

    string fn = Server.MapPath("~/Images/" + filename );

    System.Drawing.Bitmap newimg = new System.Drawing.Bitmap(fn);
    int h = newimg.Height;
    int w = newimg.Width;

    if (w > 100)
    {
        objJpeg = new ASPJPEGLib.ASPJpeg();
        objJpeg.Open(Server.MapPath("~/Images/" + FileUpload1.FileName.ToString()));

        int L = 100;
        objJpeg.Width = L;

        objJpeg.Height = objJpeg.OriginalHeight * L / objJpeg.OriginalWidth;
        objJpeg.Save(Server.MapPath("~/Images/" + "small" + FileUpload1.FileName));

        string path = Server.MapPath("~/Images/" + FileUpload1.FileName.ToString());
        FileInfo file = new FileInfo(path);
        file.Delete();


    }
    else
    {

    }


}


protected void Button1_Click(object sender, EventArgs e)
{

    FileUpload1.SaveAs(Server.MapPath("~/Images/" + FileUpload1.FileName.ToString()));
    sizeManage(FileUpload1.FileName.ToString());

}

我在 file.delete() 处遇到错误;

(该进程无法访问文件 'D:\sasiweb\myimage\Images\jalsa.jpeg',因为它正被另一个进程使用。)

【问题讨论】:

  • 一些程序员发送了答案,但又出现同样的错误
  • (您在自己的帖子中提出的版主标志;版主标志功能用于管理问题、网站滥用等 - 不适用于常规问题请求)
  • 可能是在 .NET 垃圾收集器出现并将其删除之前,保存在文件中的前一个对象仍在内存中。

标签: asp.net


【解决方案1】:

你必须关闭

objJpeg

做这个操作。

由于文件是使用 objJpeg 对象打开的,因此必须释放它才能删除文件。

string path = Server.MapPath("~/Images/" + FileUpload1.FileName.ToString());
FileInfo file = new FileInfo(path);

objJpeg.Close(); // release the resources held by the object
file.Delete();

或者您可以在 using 语句中编写文件打开过程。

【讨论】:

  • 对不起,我遇到了同样的问题
【解决方案2】:

ASPJPEGLib.ASPJpeg() 是否实现 IDisposable?如果是这样,那么您应该在保存后将其丢弃。最简单的方法是将其包装在 Using 语句中,例如。

        using (objJpeg = new ASPJPEGLib.ASPJpeg())
        {
           objJpeg.Open(Server.MapPath("~/Images/" + FileUpload1.FileName.ToString()));

           int L = 100;
           objJpeg.Width = L;

           objJpeg.Height = objJpeg.OriginalHeight * L / objJpeg.OriginalWidth;
           objJpeg.Save(Server.MapPath("~/Images/" + "small" + FileUpload1.FileName));
        }

        string path = Server.MapPath("~/Images/" + FileUpload1.FileName.ToString());
        FileInfo file = new FileInfo(path);
        file.Delete();

【讨论】:

    【解决方案3】:

    您必须关闭该文件。
    ...

        objJpeg.Save(Server.MapPath("~/Images/" + "small" + FileUpload1.FileName));
        objJpeg.Close();
        string path = Server.MapPath("~/Images/" + FileUpload1.FileName.ToString());
    

    ...

    【讨论】:

    • 对不起,我遇到了同样的问题
    猜你喜欢
    • 1970-01-01
    • 2015-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多