这问题郁闷我两天了,也不知道是我程序写的有问题还是vs2005有问题!我用的是GridView绑定数据
下面是我写的代码,用来删除xml里的一行数据!可是不管用哪种方法删除行都报同一个错,只要删除的不是数据绑定显示的哪个xml就没问题!就能正确删除,这是怎么回事!这是我的出错信息说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.IO.IOException: 文件“G:\WZ tool\tree\App_Data\DB\db.xml”正由另一进程使用,因此该进程无法访问该文件。这是我的xml
<?xml version="1.0" encoding="utf-8"?>
<infor>
<Student>
<id>1</id>
<name>路人甲</name> />
<sex>男</sex>/>
<age>24</age>
</Student>
<Student>
<id>2</id>
<name>认不得</name> />
<sex>男</sex>/>
<age>24</age>
</Student>
</infor>///////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////第一种删除方法////////////////////////////////////
protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e)
{
string Path = ConfigurationManager.AppSettings["MapPath"].ToString();
StreamReader sr = new StreamReader(Path);
DataSet ds = new DataSet();
ds.ReadXml(sr);
sr.Dispose (); //释放Stream资源,
ds.Tables[0].Rows.RemoveAt(e.RowIndex);
ds.AcceptChanges();
StreamWriter sw = new StreamWriter(Path);//执行删除在这儿报错
ds.WriteXml(sw);
sw.Close();
}
////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////第二种删除方法////////////////////////////////////////
protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e)
{
string Path = ConfigurationManager.AppSettings["MapPath"].ToString();//xml存放路径
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(Path);
XmlNode root = xmlDoc.SelectSingleNode("infor");
XmlNodeList xnl = root.ChildNodes;
foreach (XmlNode xn in xnl)
{
if (xn.SelectSingleNode("id").InnerText == "1")
{
root.RemoveAll();
xmlDoc.Save(Path);//执行删除在这儿报错
}
}
}
///////////////////////////////////////////////////////////////////////////
这是我的Page_Load方法
protected void Page_Load(object sender, EventArgs e)
{
string Path = ConfigurationManager.AppSettings["MapPath"].ToString();
StreamReader sr = new StreamReader(Path);
DataSet ds = new DataSet();
ds.ReadXml(sr);
sr.Dispose();
GridView1.DataSource = ds.Tables[0];
GridView1.DataBind();
}
//////////////////////////////////////////////////////////////////
下面是我写的代码,用来删除xml里的一行数据!可是不管用哪种方法删除行都报同一个错,只要删除的不是数据绑定显示的哪个xml就没问题!就能正确删除,这是怎么回事!这是我的出错信息说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.IO.IOException: 文件“G:\WZ tool\tree\App_Data\DB\db.xml”正由另一进程使用,因此该进程无法访问该文件。这是我的xml
<?xml version="1.0" encoding="utf-8"?>
<infor>
<Student>
<id>1</id>
<name>路人甲</name> />
<sex>男</sex>/>
<age>24</age>
</Student>
<Student>
<id>2</id>
<name>认不得</name> />
<sex>男</sex>/>
<age>24</age>
</Student>
</infor>///////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////第一种删除方法////////////////////////////////////
protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e)
{
string Path = ConfigurationManager.AppSettings["MapPath"].ToString();
StreamReader sr = new StreamReader(Path);
DataSet ds = new DataSet();
ds.ReadXml(sr);
sr.Dispose (); //释放Stream资源,
ds.Tables[0].Rows.RemoveAt(e.RowIndex);
ds.AcceptChanges();
StreamWriter sw = new StreamWriter(Path);//执行删除在这儿报错
ds.WriteXml(sw);
sw.Close();
}
////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////第二种删除方法////////////////////////////////////////
protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e)
{
string Path = ConfigurationManager.AppSettings["MapPath"].ToString();//xml存放路径
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(Path);
XmlNode root = xmlDoc.SelectSingleNode("infor");
XmlNodeList xnl = root.ChildNodes;
foreach (XmlNode xn in xnl)
{
if (xn.SelectSingleNode("id").InnerText == "1")
{
root.RemoveAll();
xmlDoc.Save(Path);//执行删除在这儿报错
}
}
}
///////////////////////////////////////////////////////////////////////////
这是我的Page_Load方法
protected void Page_Load(object sender, EventArgs e)
{
string Path = ConfigurationManager.AppSettings["MapPath"].ToString();
StreamReader sr = new StreamReader(Path);
DataSet ds = new DataSet();
ds.ReadXml(sr);
sr.Dispose();
GridView1.DataSource = ds.Tables[0];
GridView1.DataBind();
}
//////////////////////////////////////////////////////////////////
???sr.Flush();
???
出现的问题,用 bugattieb164() 的方法应该能解决,同一文件是不允许同时进行操作的