向高手求救:The process cannot access the file 'X:\X.XXX' because it is being used by another process

moonwrite 2009-03-27 11:39:20
页面外有个Generate按钮 点击了后 调用Generate()方法

但出现的问题是这样的
1.我登陆后 点击Generate按钮 过了6分钟后 被弹出了 要重新登陆 可是Session的时间还没有过 Session是保存在MSSQL中的
2.我再登陆后 点击Generate按钮 差不多有过了6分钟 提示:
The process cannot access the file "C:\\accounts\i-techcomau\products\Products.xml" because it is being used by another process.

几天了 一直重复的上面的问题

最后说一下 asp 和 aspx 所在的那个文件夹 里面有7万多过个文件了~~~

有什么方法可以解决这个问题啊~~~

using System;
using System.IO;
using System.Data;
using System.Text;
using MYSDatabase.DataSet;
using Microsoft.ApplicationBlocks.Data;

public class FileGenerator
{
// Fields
private int appID = -1;
private string rootFolder = null;
private string websiteName = null;


// Methods
public FileGenerator(int appID, string rootFolder)
{
this.appID = appID;
this.websiteName = new SystemAdmin().GetApplicationWebsite(appID);
this.rootFolder = rootFolder;
}

public string Generate()
{
StreamWriter writer = null;
StreamWriter writer1 = null;
StreamWriter writer2 = null;
StreamWriter writer3 = null;
StreamWriter writer4 = null;
StreamWriter writer5 = null;
StreamWriter writer6 = null;
StringBuilder builder = new StringBuilder();
if ((this.appID != -1) && (this.rootFolder != null))
{
File.Delete(row.RootFolder + @"\" + row.ProductFolder + @"\Products.xml");
删除的就是C:\\accounts\i-techcomau\products\Products.xml
writer = new StreamWriter(row.RootFolder + @"\" + row.ProductFolder + @"\Products.xml", false);
writer.WriteLine("<?xml version=\"1.0\" ?>");
writer.WriteLine("<products>");
在这里面开始使用writer~writer6根据数据库生成aspx和asp文件
}
return builder.ToString();
}
}
...全文
5309 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
ViewStates 2009-03-31
  • 打赏
  • 举报
回复
你再看看你的代码,看有没有可能出现一边打开文件,一边又再删除文件?
moonwrite 2009-03-28
  • 打赏
  • 举报
回复
再一次人工顶贴
moonwrite 2009-03-27
  • 打赏
  • 举报
回复
全部已经有Close()
人生就是赌 2009-03-27
  • 打赏
  • 举报
回复
确实是文件流没有关闭
writer.Close()
moonwrite 2009-03-27
  • 打赏
  • 举报
回复
color=#FF0000]全部已经有Close()[/color]
Adechen 2009-03-27
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 zhoufoxcn 的回复:]
在使用完非托管资源之后,尽量调用它的Close()或者Dispose()方法关闭,在没有调用这个方法之前别的程序是不能再次操作的。
[/Quote]
就是说要及时地释放所占用的资源
周公 2009-03-27
  • 打赏
  • 举报
回复
在使用完非托管资源之后,尽量调用它的Close()或者Dispose()方法关闭,在没有调用这个方法之前别的程序是不能再次操作的。
ytycoffe 2009-03-27
  • 打赏
  • 举报
回复
writer 使用完成要显示关闭,对文件操作的类是非托管资源,使用完闭后不显示关闭很易容出现这样的Bug
liuyeede 2009-03-27
  • 打赏
  • 举报
回复
给文件被其他进程使用,也就是说其他进程打开该文件后未关闭。先关闭再进行相关操作。
jzywh 2009-03-27
  • 打赏
  • 举报
回复
writer.Close()
return builder.ToString();
}
}
jzywh 2009-03-27
  • 打赏
  • 举报
回复
writer.Close()
return builder.ToString();
}
}
moonwrite 2009-03-27
  • 打赏
  • 举报
回复
人工顶贴~~~~
wuyq11 2009-03-27
  • 打赏
  • 举报
回复
File.Delete放在最后,操作完成后关闭Products.xml的操作,再删除
moonwrite 2009-03-27
  • 打赏
  • 举报
回复
本来我想把所有代码都贴出来的
但提示太长了

6~7 个 StreamWriter 每个 StreamWriter 写的东西不同
最后全部有关闭的

第一次登陆是这样的
1.我登陆后 点击Generate按钮 过了6分钟后 被弹出了 要重新登陆 可是Session的时间还没有过 Session是保存在MSSQL中的


第二次登陆是这样的
2.我再登陆后 点击Generate按钮 差不多有过了6分钟 提示:
The process cannot access the file "C:\\accounts\i-techcomau\products\Products.xml" because it is being used by another process.
ViewStates 2009-03-27
  • 打赏
  • 举报
回复
1 TRY, CATCH一下这里
File.Delete(row.RootFolder + @"\" + row.ProductFolder + @"\Products.xml");

2.你这个地方是否有可能出现多线程导致的错误情况?如果有
需要用SINGLETON去处理掉
public class FileGenerate
{
private FileGenerate();
public static readonly FileGenerate singleInstance=new FileGenerate();
}

PS:你申明了6,7个STREAMWRITE干什么?

62,073

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧