När jag debugar ett program som skapar en xml-fil med hjälp av XMLTextWriter, sedan stoppar programet och kör igång det igen och vill använda filen så får jag felmeddelandet att filen används av ett annat program.
Hur kommer jag åt detta problemet?
XmlTextWriter writer = new XmlTextWriter("jhk.xml", null);
writer.Formatting = Formatting.Indented;
writer.WriteStartDocument();
writer.WriteStartElement("user");
//writing a encrypted version of name and password
writer.WriteElementString("name", crypt.Encrypt(tBUsername.Text.Trim(), "test"));
writer.WriteElementString("password", crypt.Encrypt(tBPassword.Text.Trim(), "test"));
writer.WriteEndElement();
writer.WriteEndDocument();
writer.Flush();
writer.Close();
Antar att det är ngt jag missar när jag skapar fieln ;)
Kan det vara samma fel som när man kör en Accessdatabas och inte har några skrivrättigheter satta?
Kolla mappen din xml-fil ligger i eller ska ligga i. Se till att aspnet användaren har skrivrättigheter och att rutan för att ärva föräldrar inte är iklickad.
Ge flera användare skrivrättigheter för att testa. T.ex. System och Network om de inte har. Jag är nästan 100 på att det har med rättigheterna att göra.
Och glöm inte rutan för att ärva förälders rättigheter. Om den är iklickad på mappen så funkar det inte.
Ser inte varför det skulle ha med rättigheter att göra, brukar vara annat felmeddelande. Du kanske i debug mode stoppar koden innan programmet nått writer.Close() och därför inte kommer åt filen för att XmlTextWriter inte släppt filen.
OK, nu har jag satt rättigheterna till ASPNET, SYSYTEM och nätverk + den som är inloggad till att ha fullständiga rättigheter utan några arv. Men problemet kvarstår :(
Är det ingen ASP.NET applikation behöver inte ASPNET ha några som helst rättigheter. Som Dino säger kan det vara så att filen inte stängs korrekt och blir då låst. T.ex om ett Exception kastas innan .Close() kommer inte den koden att köras. För att slippa problem med att resurser inte frigörs kan man använda using() eller try ... finally.
I fall objektet implanterar IDisposable:
using(MittObjekt objekt = new MittObjekt())
{
// gör något
}
Om inte IDisposable:
MittObjekt objekt = new MittObjekt();
try
{
objekt.Open();
// gör något
}
finally
{
objekt.Close();
}
try
{
writer = new XmlTextWriter("jhk.xml", null);
writer.Formatting = Formatting.Indented;
writer.WriteStartDocument();
writer.WriteStartElement("user");
//writing a encrypted version of name and password
writer.WriteElementString("name", crypt.Encrypt(tBUsername.Text.Trim(), "test"));
writer.WriteElementString("password", crypt.Encrypt(tBPassword.Text.Trim(), "test"));
writer.WriteEndElement();
writer.WriteEndDocument();
writer.Flush();
}
finally
{
writer.Close();
}
Det konstiga är att första gången när jag skapar filen så är det inga problem att ta bort den. Men om jag sedan startar programmet en annan gång och försöker ta bort filen så kastas det exceptions. :(
Pinsamt värre :r
Missade att stänga en reader när jag läser in data från filen om den redan är skapad. Blir väl så när man gör det lite halvslavsigt. Tack för all hjälp och ideér, har ju fåt en större inblick i rättigheterna på asp ivf :D
441 ms totalt · 4 externa anrop · v20260731065814-full.6fe65c25