Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Datei kann nicht geladen werden, weil sie noch im Zugriff ist
MalleBuchsbaum
myCSharp.de - Member



Dabei seit:
Beiträge: 12
Herkunft: 24558 Henstedt-Ulzburg

Themenstarter:

Datei kann nicht geladen werden, weil sie noch im Zugriff ist

beantworten | zitieren | melden

Hallo liebes Forum!
Ich habe mich eben angemeldet, da ich ein Problem mit meinem Programm habe.
Ich arbeite zur Zeit an einem Energierechener der die Stromkosten für ein ganzes Haus errechnet und in dem der Tausch von z.B. Lampen durch Engeriesparlampen protokolliert wird.
Den Text speichere ich in einer XML ab und rufen ihn, falls vorhanden, wieder ab.

Da liegt aber mein Problem:
Der Prozess kann nicht auf die Datei "C:\XML\Daten_I.xml" zugreifen, da sie von einem anderen Prozess verwendet wird.

Der "LoadData"-Code:

 
           
private void LoadData()
        {
            XmlReader reader = XmlReader.Create("C:\\XML\\Daten_I.xml");

            reader.ReadStartElement();
            reader.ReadStartElement("Einstellungen");
            string Einstellungen = reader.ReadString();
            reader.ReadEndElement();
            reader.ReadStartElement("Name");
            string Name = reader.ReadString();
            reader.ReadEndElement();
            reader.ReadStartElement("Stromanbieter");
            string Stromanbieter = reader.ReadString();
            reader.ReadEndElement();
            reader.ReadStartElement("Preis");
            decimal Preis = decimal.Parse(reader.ReadString());
            reader.ReadEndElement();
            reader.ReadEndElement();
            reader.Close();

            textBox1.Text = Name;
            comboBox1.Text = Stromanbieter;
            numericUpDown1.Value = Preis;
         }         


Die Datei wird erstellt, dann aber tritt der oben gennate Fehler auf.
Da ich Neuling bin und noch nicht sehr viel Erfahrung habe, finde ich den Fehler einfach nicht... Ich habe auch schon in "Das C# 2008 Codebook" nachgeguckt, aber nichts gefunden... Ich habe auch schon versucht das @"C:\XML\Daten_I.xml" durch "C:\\XML\\Daten_I.xml" zu ersetzen, aber vergeblich.
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von MalleBuchsbaum am .
Sorry ... Ich bin Neuling!
private Nachricht | Beiträge des Benutzers
Gelöschter Benutzer

beantworten | zitieren | melden

die fehlermeldung sagt doch einfach alles... du hast irgendwo noch eine anwendung, die auf diese datei zugreift und daher kannst du sie nciht öffnen.
MalleBuchsbaum
myCSharp.de - Member



Dabei seit:
Beiträge: 12
Herkunft: 24558 Henstedt-Ulzburg

Themenstarter:

beantworten | zitieren | melden

Ja... Es ist aber egal wo ich die Datei hinschreibe, auf den Desktop oder sonst wo, immer das gleiche! Was für ein Programm könnte das den sein? Hat jemand eine Idee?
Sorry ... Ich bin Neuling!
private Nachricht | Beiträge des Benutzers
ErfinderDesRades
myCSharp.de - Experte

Avatar #avatar-3151.jpg


Dabei seit:
Beiträge: 5409

beantworten | zitieren | melden

ich würde halt deine eigene app verdächtigen. Also dass du iwo einen lese-Zugriff machst, und den nicht wieder freigibst.
In deinem post sagst du auch, du zeigest die Load-Methode, aber das ist wohl eine Save-Methode, odr?
Der frühe Apfel fängt den Wurm.
private Nachricht | Beiträge des Benutzers
MalleBuchsbaum
myCSharp.de - Member



Dabei seit:
Beiträge: 12
Herkunft: 24558 Henstedt-Ulzburg

Themenstarter:

beantworten | zitieren | melden

Das kann sein, aber wo???

Nochmal der Code:



using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Xml;
using System.IO;

namespace Energie_Rechner
{
    public partial class Einstellungen : Form
    {
        string gespeichert = "C:\\XML\\Daten_I.xml";

        public Einstellungen()
        {
            InitializeComponent();
        }

        private void LoadData()
        {
            XmlReader reader = XmlReader.Create("C:\\XML\\Daten_I.xml");

            reader.ReadStartElement();
            reader.ReadStartElement("Einstellungen");
            string Einstellungen = reader.ReadString();
            reader.ReadEndElement();
            reader.ReadStartElement("Name");
            string Name = reader.ReadString();
            reader.ReadEndElement();
            reader.ReadStartElement("Stromanbieter");
            string Stromanbieter = reader.ReadString();
            reader.ReadEndElement();
            reader.ReadStartElement("Preis");
            decimal Preis = decimal.Parse(reader.ReadString());
            reader.ReadEndElement();
            reader.ReadEndElement();
            reader.Close();

            textBox1.Text = Name;
            comboBox1.Text = Stromanbieter;
            numericUpDown1.Value = Preis;
         }

        private void WriteData()
         {
             // speichern
             XmlWriter writer = XmlWriter.Create("C:\\XML\\Daten_I.xml", new XmlWriterSettings() { Indent = true, NewLineChars = Environment.NewLine });
             writer.WriteStartDocument();
             // <?xml ...?>
             writer.WriteStartElement("Einstellungen");
             writer.WriteStartElement("Name");
             writer.WriteString(textBox1.Text);
             writer.WriteEndElement();
             writer.WriteStartElement("Stromanbieter");
             writer.WriteString(comboBox1.Text);
             writer.WriteEndElement();
             writer.WriteStartElement("Preis");
             writer.WriteString(numericUpDown1.Value.ToString());
             writer.WriteEndElement();
             writer.WriteEndElement();
             writer.WriteEndDocument();
             writer.Close();
             writer.Close();
             
         }
        
        private void button2_Click(object sender, EventArgs e)
        {
            Application.Exit();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            WriteData();

            Rechenfenster form1 = new Rechenfenster();
            Einstellungen form2 = new Einstellungen();
             form1.Show();
             form2.Close();
        }

        private void Einstellungen_Load(object sender, EventArgs e)
        {
            if (File.Exists(gespeichert))
            {
                LoadData();
            }
        }
       
    }
}

Sorry ... Ich bin Neuling!
private Nachricht | Beiträge des Benutzers
ErfinderDesRades
myCSharp.de - Experte

Avatar #avatar-3151.jpg


Dabei seit:
Beiträge: 5409

beantworten | zitieren | melden

warum steht in writeData writer.close 2 mal hinternander?
Zitat


        private void button1_Click(object sender, EventArgs e)
        {
            WriteData();

            Rechenfenster form1 = new Rechenfenster();
            Einstellungen form2 = new Einstellungen();
             form1.Show();
             form2.Close();
        }
greift Rechenfenster auch auf die Datei zu?

form2 wird neu erstellt, aber nie angezeigt. In seinem Form_Load liest es aber auch die Datei. Und dann gleich wieder geschlossen.

Also da wird in extrem kurzer Zeit erst reingeschrieben, und dann ausgelesen, schmeiß doch man das form2 da raus, das tut eh nix sinnvolles.
Der frühe Apfel fängt den Wurm.
private Nachricht | Beiträge des Benutzers
MalleBuchsbaum
myCSharp.de - Member



Dabei seit:
Beiträge: 12
Herkunft: 24558 Henstedt-Ulzburg

Themenstarter:

beantworten | zitieren | melden

Hallo,
danke für die Antwort! Ich benötige From2 auf jeden Fall, da dort die Änderung u.ä. eingetragen & gespeichert werden. Bei button1_Click wird in meine XML geschrieben und es wird das Rechenfenster (form1) angezeigt. Darauhin wird form2 (Einstellungen) geschlossen. Mache ich nur einen Denkfehler???
Sorry ... Ich bin Neuling!
private Nachricht | Beiträge des Benutzers
ErfinderDesRades
myCSharp.de - Experte

Avatar #avatar-3151.jpg


Dabei seit:
Beiträge: 5409

beantworten | zitieren | melden

evtl., jedenfalls kannich deinen Ausführungen nicht wirklich folgen:

   private void button1_Click(object sender, EventArgs e)
        {
//Bei button1_Click wird in meine XML geschrieben und es wird das Rechenfenster (form1) angezeigt.
            WriteData();
            Rechenfenster form1 = new Rechenfenster();
             form1.Show();
//ok

//Darauhin wird form2 (Einstellungen) geschlossen.
            Einstellungen form2 = new Einstellungen();
             form2.Close();
//nein. es wird ein neues Einstellungen - Objekt erzeugt und gleich geschlossen - was soll das?
        }
Wenn du das aktuelle Form schließen willst, erzeuge bitte kein neues, sondern verwende einfach this.Close().
Der frühe Apfel fängt den Wurm.
private Nachricht | Beiträge des Benutzers
MalleBuchsbaum
myCSharp.de - Member



Dabei seit:
Beiträge: 12
Herkunft: 24558 Henstedt-Ulzburg

Themenstarter:

beantworten | zitieren | melden

Ok, ich habe jetzt


this.Close();
eingesetzt. Das Problem tritt aber immer noch auf...
Zitat
System.IO.IOException wurde nicht behandelt.
Message=Der Prozess kann nicht auf die Datei "C:\XML\Daten_I.xml" zugreifen, da sie von einem anderen Prozess verwendet wird.
Source=mscorlib
StackTrace:
bei System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
bei System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy)
bei System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share)
bei System.Xml.XmlWriter.Create(String outputFileName, XmlWriterSettings settings)
bei Energie_Rechner_v2.Einstellungen.WriteData() in C:\Users\Malte\documents\visual studio 2010\Projects\Energie-Rechner_v2\Energie-Rechner_v2\Einstellungen.cs:Zeile 51.
bei Energie_Rechner_v2.Einstellungen.button1_Click(Object sender, EventArgs e) in C:\Users\Malte\documents\visual studio 2010\Projects\Energie-Rechner_v2\Energie-Rechner_v2\Einstellungen.cs:Zeile 78.
bei System.Windows.Forms.Control.OnClick(EventArgs e)
bei System.Windows.Forms.Button.OnClick(EventArgs e)
bei System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
bei System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
bei System.Windows.Forms.Control.WndProc(Message& m)
bei System.Windows.Forms.ButtonBase.WndProc(Message& m)
bei System.Windows.Forms.Button.WndProc(Message& m)
bei System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
bei System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
bei System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
bei System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg)
bei System.Windows.Forms.Application.ComponentManager. System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop (Int32 dwComponentID, Int32 reason, Int32 pvLoopData)
bei System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
bei System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
bei System.Windows.Forms.Application.Run(Form mainForm)
bei Energie_Rechner_v2.Program.Main() in C:\Users\Malte\documents\visual studio 2010\Projects\Energie-Rechner_v2\Energie-Rechner_v2\Program.cs:Zeile 18.
bei System.AppDomain._nExecuteAssembly(Assembly assembly, String[] args)
bei System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
bei Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
bei System.Threading.ThreadHelper.ThreadStart_Context(Object state)
bei System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
bei System.Threading.ThreadHelper.ThreadStart()
InnerException:

Das ist die Meludng. Ich weiß wirklich nicht weiter!
Sorry ... Ich bin Neuling!
private Nachricht | Beiträge des Benutzers
ErfinderDesRades
myCSharp.de - Experte

Avatar #avatar-3151.jpg


Dabei seit:
Beiträge: 5409

beantworten | zitieren | melden

Hmm - könnte sein, dass beim XmlReader Close() nicht mit Dispose() austauschbar ist?
Also probierma, den XmlReader in einem using-block zu verwenden, sowas:


using (XmlReader reader = XmlReader.Create("C:\\XML\\Daten_I.xml")){
//reader-code
}
und den writer natürlich ebenso.
Der frühe Apfel fängt den Wurm.
private Nachricht | Beiträge des Benutzers
markus111
myCSharp.de - Member

Avatar #avatar-3108.png


Dabei seit:
Beiträge: 520
Herkunft: Henstedt-Ulzburg

beantworten | zitieren | melden

Tach Malte,

Probleme mit meinen Code...komisch^^

Hab dir mal das using eingebaut, so müsste es klappen:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Xml;
using System.IO;

namespace Energie_Rechner
{
    public partial class Einstellungen : Form
    {
        string gespeichert = "C:\\XML\\Daten_I.xml";

        public Einstellungen()
        {
            InitializeComponent();
        }

        private void LoadData()
        {
            using (XmlReader reader = XmlReader.Create("C:\\XML\\Daten_I.xml"))
            {
                reader.ReadStartElement();
                reader.ReadStartElement("Einstellungen");
                string Einstellungen = reader.ReadString();
                reader.ReadEndElement();
                reader.ReadStartElement("Name");
                string Name = reader.ReadString();
                reader.ReadEndElement();
                reader.ReadStartElement("Stromanbieter");
                string Stromanbieter = reader.ReadString();
                reader.ReadEndElement();
                reader.ReadStartElement("Preis");
                decimal Preis = decimal.Parse(reader.ReadString());
                reader.ReadEndElement();
                reader.ReadEndElement();
            }

            textBox1.Text = Name;
            comboBox1.Text = Stromanbieter;
            numericUpDown1.Value = Preis;
        }

        private void WriteData()
        {
            // speichern
            using (XmlWriter writer = XmlWriter.Create("C:\\XML\\Daten_I.xml", new XmlWriterSettings() { Indent = true, NewLineChars = Environment.NewLine }))
            {
                writer.WriteStartDocument();
                // <?xml ...?>
                writer.WriteStartElement("Einstellungen");
                writer.WriteStartElement("Name");
                writer.WriteString(textBox1.Text);
                writer.WriteEndElement();
                writer.WriteStartElement("Stromanbieter");
                writer.WriteString(comboBox1.Text);
                writer.WriteEndElement();
                writer.WriteStartElement("Preis");
                writer.WriteString(numericUpDown1.Value.ToString());
                writer.WriteEndElement();
                writer.WriteEndElement();
                writer.WriteEndDocument();
            }
        }

        private void button2_Click(object sender, EventArgs e)
        {
            Application.Exit();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            WriteData();
            Rechenfenster form1 = new Rechenfenster();
            form1.Show();
            this.Close();
        }

        private void Einstellungen_Load(object sender, EventArgs e)
        {
            if (File.Exists(gespeichert))
            {
                LoadData();
            }
        }

    }
}

Sorry, mein fehler, hab ihm das mit den using falsch erklärt

mfg.
markus111 (du kennst mich :P)

EDIT: Code formatiert
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von markus111 am .
private Nachricht | Beiträge des Benutzers
MalleBuchsbaum
myCSharp.de - Member



Dabei seit:
Beiträge: 12
Herkunft: 24558 Henstedt-Ulzburg

Themenstarter:

beantworten | zitieren | melden

Vielen Dank,
ja Markus, ich kenne dich in der Tat. Ich werde den Code glecih mal testen!
Danke,
MalleBuchsbaum
Sorry ... Ich bin Neuling!
private Nachricht | Beiträge des Benutzers
MalleBuchsbaum
myCSharp.de - Member



Dabei seit:
Beiträge: 12
Herkunft: 24558 Henstedt-Ulzburg

Themenstarter:

beantworten | zitieren | melden

Nein... Leider nicht! Es kommt folgenden Meldung: Ein Teil der Datein konnt nicht gefunden werden..."+Pfad("C//usw)...
Sorry ... Ich bin Neuling!
private Nachricht | Beiträge des Benutzers
markus111
myCSharp.de - Member

Avatar #avatar-3108.png


Dabei seit:
Beiträge: 520
Herkunft: Henstedt-Ulzburg

beantworten | zitieren | melden

Hallo,

Lädst du die Dateien auch in einer anderen Form?

mfg.
markus111
private Nachricht | Beiträge des Benutzers
ErfinderDesRades
myCSharp.de - Experte

Avatar #avatar-3151.jpg


Dabei seit:
Beiträge: 5409

beantworten | zitieren | melden

hmm, also mir gehen die Ideen aus, und ich kann den Fehler auch nicht reproduzieren (v.a., weil ich das Xml nicht habe).
Malle, kannst du vlt. die Solution zippen, oder ein Sample basteln mit dem Fehler, und anhängen? Aber vollständig, und lauffähig müsste es sein.
Der frühe Apfel fängt den Wurm.
private Nachricht | Beiträge des Benutzers
MalleBuchsbaum
myCSharp.de - Member



Dabei seit:
Beiträge: 12
Herkunft: 24558 Henstedt-Ulzburg

Themenstarter:

beantworten | zitieren | melden

So, ich habe jetzt noch mal den Code von markus111 eingefügt und es kommen folgende Meldungen:
Zitat
Fehler 4 "Name" verursacht einen Konflikt mit der Deklaration "System.Windows.Forms.Control.Name". C:\Users\Malte\documents\visual studio 2010\Projects\Energie-Rechner_v2\Energie-Rechner_v2\Einstellungen.cs 43 29 Energie-Rechner_v2
Fehler 6 Der Name "Preis" ist im aktuellen Kontext nicht vorhanden. C:\Users\Malte\documents\visual studio 2010\Projects\Energie-Rechner_v2\Energie-Rechner_v2\Einstellungen.cs 45 36 Energie-Rechner_v2
Fehler 5 Der Name "Stromanbieter" ist im aktuellen Kontext nicht vorhanden. C:\Users\Malte\documents\visual studio 2010\Projects\Energie-Rechner_v2\Energie-Rechner_v2\Einstellungen.cs 44 30 Energie-Rechner_v2
Fehler 3 Der Typ- oder Namespacename "Einstellungen" konnte nicht gefunden werden. (Fehlt eine Using-Direktive oder ein Assemblyverweis?) C:\Users\Malte\documents\visual studio 2010\Projects\Energie-Rechner_v2\Energie-Rechner_v2\Program.cs 18 33 Energie-Rechner_v2
Fehler 7 Der Typ- oder Namespacename "Rechenfenster" konnte nicht gefunden werden. (Fehlt eine Using-Direktive oder ein Assemblyverweis?) C:\Users\Malte\documents\visual studio 2010\Projects\Energie-Rechner_v2\Energie-Rechner_v2\Einstellungen.cs 78 13 Energie-Rechner_v2
Fehler 8 Der Typ- oder Namespacename "Rechenfenster" konnte nicht gefunden werden. (Fehlt eine Using-Direktive oder ein Assemblyverweis?) C:\Users\Malte\documents\visual studio 2010\Projects\Energie-Rechner_v2\Energie-Rechner_v2\Einstellungen.cs 78 39 Energie-Rechner_v2


Lieg es vllt. daran das ich VS2010 Beta2 verwenden? Sin das noch Bugs in VS?
Sorry ... Ich bin Neuling!
private Nachricht | Beiträge des Benutzers
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 52329
Herkunft: Berlin

beantworten | zitieren | melden

Hallo MalleBuchsbaum,

siehe [Hinweis] Syntaxfehler selbst lösen (Compilerfehlermeldungen).

herbivore
private Nachricht | Beiträge des Benutzers
MalleBuchsbaum
myCSharp.de - Member



Dabei seit:
Beiträge: 12
Herkunft: 24558 Henstedt-Ulzburg

Themenstarter:

beantworten | zitieren | melden

Vielen Dank herbivore,
MSDN erzählt mir da leider etwas von Websites und NET.Farmework 1.1...
Das wird es höchstwahrscheinlich nicht sein. Ich habe echt keinen Plan mehr... Soll ich den Rechner einfach mal zippen & dann hochladen?
Sorry ... Ich bin Neuling!
private Nachricht | Beiträge des Benutzers
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 52329
Herkunft: Berlin

beantworten | zitieren | melden

Hallo MalleBuchsbaum,

du solltest erstmal versuchen, ein minimales Projekt zu erstellen, das den Fehler zeigt. Dabei ist es sehr wahrscheinlich, dass du selber die Ursache findest. Wenn nicht, kannst du das minimale Projekt anhängen.

herbivore
private Nachricht | Beiträge des Benutzers
MalleBuchsbaum
myCSharp.de - Member



Dabei seit:
Beiträge: 12
Herkunft: 24558 Henstedt-Ulzburg

Themenstarter:

beantworten | zitieren | melden

Jetzt binh ich volkommen weg... Jetzt check ich garnichts mehr. Ich habe den Code aus meinem Rechner kopiert und nur das combobox & numupdown weggenommen und im minimalen Projekt funzt es... KP warum!
Sorry ... Ich bin Neuling!
private Nachricht | Beiträge des Benutzers
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 52329
Herkunft: Berlin

beantworten | zitieren | melden

Hallo MalleBuchsbaum,

ich finde das nicht verwunderlich, sondern habe genau das erwartet. Jetzt geht es darum, dass du Schritt für Schritt den Code aus dem eine Projekt in das andere Projekt einfügst, bis der Fehler auftritt bzw. andersherum Schritt für Schritt Code aus dem einen Projekt entfernst, bist der Fehler nicht mehr auftritt.

herbivore
private Nachricht | Beiträge des Benutzers
MalleBuchsbaum
myCSharp.de - Member



Dabei seit:
Beiträge: 12
Herkunft: 24558 Henstedt-Ulzburg

Themenstarter:

beantworten | zitieren | melden

Ja, ich werde den XML-Writer & Reader Code nochmal neu schreiben ;) Danke für die tolle Hilfe!

EDIT: Habs geschafft! [email protected]!
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von MalleBuchsbaum am .
Sorry ... Ich bin Neuling!
private Nachricht | Beiträge des Benutzers