none
另一个进程正在使用此文件 因此该进程无法访问此文件 RRS feed

  • 问题

  • 我想在上传新图片时删除旧图片以节省磁盘空间,代码如下:

    if (Directory.Exists(Server.MapPath(filepath)))
    {
    Directory.Delete(Server.MapPath(filepath), true);
    Directory.CreateDirectory(Server.MapPath(filepath) );
    }
    else
    {
    Directory.CreateDirectory(Server.MapPath(filepath) );
    }
    FileUpload1.SaveAs(Server.MapPath(filepath) + filename);

    在本地执行没有问题,可是在虚拟主机服务器上执行到Directory.Delete(Server.MapPath(filepath), true);这句时总是出现另一个进程正在使用此文件 因此该进程无法访问此文件。

    怎样解决这个问题?

    多谢!


    王林

    2012年8月5日 4:36

答案

  • 找出使用图片的进程才是关键啊!!会不会别的代码里面访问了这些图片最后没有正确close掉啊?

    还是说访问频率过高导致?


    博客园: dotNetDR_ 的博客 - 天杀下来的BUG,不怕有我来挡!

    博客园介绍: 博客园创立于2004年1月,是面向软件开发者的高品质IT技术社区,聚集了很多优秀的软件开发者和IT技术学习者。

    • 已标记为答案 wanglin005 2012年8月10日 3:32
    2012年8月6日 10:28
  • 您说的没错,在这之前的代码中,有如下代码:

    System.Drawing.Image img2 = System.Drawing.Image.FromFile(Server.MapPath(filepath)+filename)

                   if (img2.Width < 350)
                        {
                           img2.Width=350;  }           正是这个进程在使用图片,将它改成如下代码就没问题了。 

     using (System.Drawing.Image img2 = System.Drawing.Image.FromFile(Server.MapPath(filepath)+filename))
                    {
                        if (img2.Width < 350)
                        {
                            img2.Width=350; 

                        }

                   }

             多谢了。

                                                                                                                                                                                         


    王林

    • 已标记为答案 wanglin005 2012年8月12日 13:39
    2012年8月12日 13:38

全部回复

  • 你好,

    你想删除哪些旧图片呢? 可以覆盖呢,不行吗?


    Please mark the replies as answers if they help or unmark if not.
    If you have any feedback about my replies, please contact msdnmg@microsoft.com
    Microsoft One Code Framework

    2012年8月6日 9:50
    版主
  • 找出使用图片的进程才是关键啊!!会不会别的代码里面访问了这些图片最后没有正确close掉啊?

    还是说访问频率过高导致?


    博客园: dotNetDR_ 的博客 - 天杀下来的BUG,不怕有我来挡!

    博客园介绍: 博客园创立于2004年1月,是面向软件开发者的高品质IT技术社区,聚集了很多优秀的软件开发者和IT技术学习者。

    • 已标记为答案 wanglin005 2012年8月10日 3:32
    2012年8月6日 10:28
  • 以管理员权限运行handle.exe (从http://live.sysinternals.com/处下载)

    handle.exe会列出所有的被各个进程打开的文件,然后你就可以知道是谁打开了你要使用的文件了。

    2012年8月6日 21:23
  • 您说的没错,在这之前的代码中,有如下代码:

    System.Drawing.Image img2 = System.Drawing.Image.FromFile(Server.MapPath(filepath)+filename)

                   if (img2.Width < 350)
                        {
                           img2.Width=350;  }           正是这个进程在使用图片,将它改成如下代码就没问题了。 

     using (System.Drawing.Image img2 = System.Drawing.Image.FromFile(Server.MapPath(filepath)+filename))
                    {
                        if (img2.Width < 350)
                        {
                            img2.Width=350; 

                        }

                   }

             多谢了。

                                                                                                                                                                                         


    王林

    • 已标记为答案 wanglin005 2012年8月12日 13:39
    2012年8月12日 13:38