C# - Der Prozess kann nicht auf die Datei zugreifen, da sie von einem anderen Prozess verwendet wird?
Hallo, ich habe ein Problem mit meiner programmierten Anwendung. Immer wenn ich auf den Erstellen-Button klicke kommt in einer textBox die Meldung:
Der Prozess kann nicht auf die Datei zugreifen, da sie von einem anderen Prozess verwendet wird.
Code:
private void buttonErstellen_Click(object sender, EventArgs e)
{
OpenFileDialog ofd = new OpenFileDialog();
ofd.Filter = "XML|*.xml";
if (ofd.ShowDialog() == DialogResult.OK)
{
try
{
textBoxPfad.Text = Path.GetDirectoryName(ofd.FileName);
DeserializeXml(ofd.FileName);
}
catch (Exception exception)
{
textBoxStatus.Text = exception.Message;
}
}
}
public void DeserializeXml(string fileName)
{
XmlSerializer serializer = new XmlSerializer(typeof(PersonenKonfiguration));
XmlReader xmlFileReader;
try
{
Person personen = new Person { Name = "Mustermann", Vorname = "Max", Wohnort = "Musterstadt" };
xmlFileReader = XmlReader.Create(fileName);
StreamWriter writer = new StreamWriter(fileName);
serializer.Deserialize(xmlFileReader);
writer.Write(personen);
textBoxStatus.Text = "Validierung abgeschlossen.";
}
catch (Exception ex)
{
textBoxStatus.Text = ex.Message;
}
}
4 Antworten
Also entweder ist die Datei wirklich von einem anderen Programm geöffnet, oder es liegt daran, dass Du einen OpenFileDialog anstatt eines SaveFileDialog verwendest. Wenn es mit dem OpenFiledialog geht, so wie hier programmiert, dann muss ja die Datei schon im System vorhanden sein, sonst könntest Du sie ja nicht auswählen.
Naja, ist doch klar! Du machst einen Reader auf, der die Datei liest und in der nächsten Zeile machst Du einen StreamWriter auf dieselbe Datei auf - das kann ja gar nicht gehen!
Du musst entweder erst lesen, dann schreiben oder in eine Temp-Datei schreiben und dann diese nach dem Schließen aller Streams und Writer umbenennen.
Ich bin jetzt keine c#-Spezialistin, aber ich lese jetzt mal Deinen Quellcode ...
In buttonErstellen_Click willst Du eine Datei öffnen ... beim Öffnen rufst Du "DeserializeXml(ofd.FileName);" auf ... und da willst Du dann "xmlFileReader = XmlReader.Create(fileName);" diese gleiche Datei anlegen und danach beschreiben.
Einfaches Öffnen sieht anders aus ;) Meine zwei Cent ...
Du schließt den Reader nicht, er hält die Datei offen.
Wozu soll der Reader gut sein?
Ich lese es Grade am Handy möglich das ich was übersehe, aber es sieht so aus als ob der du ihn nur nutzt um die Datei zu erstellen?
Es ist eigentlich so gedacht, das er eine xml-Datei öffnen und auch gleich validieren soll. Bin noch C#-Anfänger :D
Kenn ich.
Visual Studio vergisst beim "Abschießen" eines Programms, das im Debug-Modus läuft, manchmal, den Debug-Prozess zu beenden, und dieser Debug-Prozess hält die Programmdatei [Projektordner]\bin\Debug\[Projektname].exe gesperrt.
Such mal im Taskmanager nach allen Prozessen, die mit "vs" oder "debug" beginnen, und schieß die ab. (Der Prozess der VS-Entwicklungsumgebung heißt "devenv.exe")
Edit: "msvsmon.exe" gehört auch dazu
Naja der Name des Buttons ist wohl etwas unglücklich gewählt von mir haha wenn ich auf den Erstellen-Button klicke, öffnet sich ein OpenFileDialog der die xml-Datei öffnet. Diese Datei ist aber in keinem anderen Programm geöffnet.