cannot access file (Xml) because it is used by another process...?

Babatune

Mitglied
Hallo zusammen,

ich habe folgendes Problem.
Ich öffne in meinem Programm mehrere xmls die bearbeitet und wieder gespeichert werden.
Jetzt kommt es öfter mal vor dass ich die Fehlermeldung bekomme, dass der Zugriff nicht funktioniert weil wohl ein anderer Prozess auf mein file zugreift.

Ich gehe dabei folgendermaßen vor:
Code:
XmlDocument xd = new XmlDocument();
string input = "C:\..."
FileStream fsin = new FileStrea(input,FileMode.Open,FileAccess.Read,FileShare.ReadWrite);
xd.Load(fsin);
...
//hier wird dann das input-file bearbeitet, das Ergebnis soll dann unter inputsave gespeichert werden:

XmlWriterSettings writeSet = new XmlWriterSettings();
writeSet.Indent = true;
XmlWriter xmlWriter = XmlWriter.Create(inputsave, writeSet);
xd.Save(xmlWriter);


//danach wird inputsave weiter bearbeitet
//also myprogram nimmt als Argumente inputsave und output
//dabei werden aus inputsave die Informationen geholt und das Ergebnis wird in output gespeichert
ProcessStartInfo startinfo	= new ProcessStartInfo();
startinfo.FileName = myprogram;
startinfo.Arguments = inputsave+" "+output;
startinfo.WindowStyle = ProcessWindowStyle.Hidden;
startinfo.CreateNoWindow = false;
startinfo.UseShellExecute = false;
startinfo.RedirectStandardError=true;
        	
using (Process exeProcess = Process.Start(startinfo))
{
   exeProcess.WaitForExit();
   string errorstr = exeProcess.StandardError.ReadToEnd();   
}

Die Fehlermeldung kommt unregelmäßig, also manchmal läuft es durch und manchmal hängts.
Aber es passiert dann immer an der Stelle wenn ich input unter inputsave speichern will.
Wenn ich versuche inputsave mit
System.IO.File.Delete(inputsave) zu löschen bekomm ich in dem Fall auch die gleiche Fehlermeldung

Beende ich irgendwo einen Prozess nicht anständig oder gibt es die Möglichkeit das speichern zu erzwingen also den wohl noch laufenden Prozess zu umgehen/killen?


Vielen Dank,
Babatune
 
Ah ich habs jetzt so gemacht:
Code:
using(XmlWriter xmlWriter = XmlWriter.Create(inputsave,writeSet)){
xd.Save(xmlWriter);
}
und jetzt scheints zu klappen :)
 
Zurück