积极答复者
另一个进程正在使用此文件 因此该进程无法访问此文件

问题
-
我想在上传新图片时删除旧图片以节省磁盘空间,代码如下:
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);这句时总是出现另一个进程正在使用此文件 因此该进程无法访问此文件。
怎样解决这个问题?
多谢!
王林
答案
-
找出使用图片的进程才是关键啊!!会不会别的代码里面访问了这些图片最后没有正确close掉啊?
还是说访问频率过高导致?
博客园: dotNetDR_ 的博客 - 天杀下来的BUG,不怕有我来挡!
博客园介绍: 博客园创立于2004年1月,是面向软件开发者的高品质IT技术社区,聚集了很多优秀的软件开发者和IT技术学习者。- 已标记为答案 wanglin005 2012年8月10日 3:32
-
您说的没错,在这之前的代码中,有如下代码:
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
全部回复
-
你好,
你想删除哪些旧图片呢? 可以覆盖呢,不行吗?
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 -
找出使用图片的进程才是关键啊!!会不会别的代码里面访问了这些图片最后没有正确close掉啊?
还是说访问频率过高导致?
博客园: dotNetDR_ 的博客 - 天杀下来的BUG,不怕有我来挡!
博客园介绍: 博客园创立于2004年1月,是面向软件开发者的高品质IT技术社区,聚集了很多优秀的软件开发者和IT技术学习者。- 已标记为答案 wanglin005 2012年8月10日 3:32
-
以管理员权限运行handle.exe (从http://live.sysinternals.com/处下载)
handle.exe会列出所有的被各个进程打开的文件,然后你就可以知道是谁打开了你要使用的文件了。
-
您说的没错,在这之前的代码中,有如下代码:
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