PDA

View Full Version : The process cannot access the file ' ' because it is being used by another process



bftarane
چهارشنبه 16 اسفند 1391, 13:56 عصر
سلام من گاهي اوقات سايتم رو که لود مي کنم با ارور زير مواجه ميشم
The process cannot access the file 'd:\DZHosts\LocalUser\bftarane\www.BFPortfolio.som ee.com\Web.sitemap' because it is being used by another process.

من به وسيله متد زير Node ها رو به صورت دايناميک (يعني از جدول خونده ميشن) در فايل web.sitemap مي نويسم

XmlTextWriter objXMLTW;
private void GenerateXMLFile(string sFileName)
{
Encoding enc = Encoding.UTF8;
using ( objXMLTW = new XmlTextWriter(sFileName,enc))
{

objXMLTW.WriteStartDocument();

objXMLTW.WriteStartElement("siteMap");

objXMLTW.WriteStartElement("siteMapNode");

objXMLTW.WriteAttributeString("title", "صفحه اصلی");
objXMLTW.WriteAttributeString("description","");
objXMLTW.WriteAttributeString("url","Default.aspx?Id=2");

CreateNodes(0);

objXMLTW.WriteEndDocument();
}


}
که به صورت زير در رويداد لود مسترپيجم فراخواني مي کنم


GenerateXMLFile(Server.MapPath("Web.sitemap"));
.................................................. .....................


اينم متد CreateNodes هست که در بالا استفاده شده:

public void CreateNodes(int parentId)
{
DataTable dt = GetMenuByParentID(parentId);
string Url = string.Empty;
foreach (DataRow dr in dt.Rows)
{
if (Convert.ToInt32( dr["DMenuID"])!=2)
{


if (Convert.ToInt32(dr["MenuType"]) == 0)
{
Url = dr["Url"].ToString();
}
else if (Convert.ToInt32(dr["MenuType"]) == 1)
{

Url = "Page.aspx?Id=" + dr["DMenuID"].ToString();
}
objXMLTW.WriteStartElement("siteMapNode");
objXMLTW.WriteAttributeString("title", dr["Title"].ToString());
objXMLTW.WriteAttributeString("description", "");
objXMLTW.WriteAttributeString("url", Url);
int PID = Convert.ToInt32(dr["DMenuID"]);

DataTable dt2 = GetMenuByParentID(Convert.ToInt32(dr["DMenuID"]));
foreach (DataRow dr2 in dt2.Rows)
{
if (Convert.ToInt32(dr["ParentId"] )== PID)
{
objXMLTW.WriteStartElement("siteMapNode");
objXMLTW.WriteAttributeString("title", dr["Title"].ToString());
objXMLTW.WriteAttributeString("description", "");
objXMLTW.WriteAttributeString("url", Url);
objXMLTW.WriteEndElement();
}

}

CreateNodes(Convert.ToInt32(dr["DMenuID"]));


}

}
objXMLTW.WriteEndElement();
}


جستجو کردم انگار مربوط به close کردن رايتر هست ولي نمي دونم کجا و به چه نحو اين کار رو انجام بدم.
چون در متد اول از using استفاده کردم فکر مي کنم مشکل از اون نباشه و از متد دوم باشه يعني CreateNodes و سعي کردم از using اونجا هم استفاده کنم که نتيجه اي نداد.

لطفاً راهنماييم کنيد.

newsoft
چهارشنبه 16 اسفند 1391, 15:36 عصر
سلام از try...catch استفاده کنید اطلاعات بهتری در مورد خطا و خطی که دچار مشکل شده بدهد
شاید هم مشکل از کانورت داده ها باشه