none
Errormeldungen werden nicht protokolliert RRS feed

  • Frage

  • Hallo Leute, 

    Folgender Code soll eigentlich alle Exceptions in eine log-Datei schreiben. Tut die Applikation auch, allerdings nur die erste. Alle weiteren Exceptions werden nicht mehr in die Datei geschrieben. Warum nicht. Eigentlich ist die Methode File.AppendAllText() doch dazu geeignet....

    private static string UserName = Environment.UserName;
    private static DirectoryInfo MainDirectory = new DirectoryInfo(@"C:\Users\" + UserName);

    private static string path = MainDirectory + @"\Documents\error.log";.

    .

    .

    if(!File.Exists(path))

    File.Create(path);

    try { .

    .

    } catch(Exception error) { File.AppendAllText(path, DateTime.Now.ToLongTimeString() + " " + "Err in uploadFileToolStripMenuItem_Click:" + Environment.NewLine + error.ToString()); string ausgabe = "Fehlermeldung wurde in " + path + " gesichert!"; this.Message(ausgabe, "Error", MessageBoxIcon.Error); }












    • Bearbeitet tklustig Donnerstag, 22. November 2018 08:48
    Donnerstag, 22. November 2018 08:44

Antworten

  • Hi,

    File.AppendAllText erstellt die Datei, wenn sie noch nicht vorhanden sein sollte und schreibt den gegebenen Inhalt dann ans Ende der Datei.

    Ich kann da auch keinen Fehler feststellen, daher denke ich immer noch, dass es an deinem Code liegt.

    Evtl. ist die Datei, die Du in "path" angibst, anderweitig im Zugriff.

    Führ das hier mal bitte in deiner Anwendung aus. Einmal mit deinem Pfad, einmal mit einem, der definitiv nicht anderweitig verwendet wird.

    private void WriteFile()
    {
        for( Int16 i = 0; i < 10; i++ ) {
            File.AppendAllText( @"X:\Ordner\Datei.txt", $"Hallo Welt - {DateTime.Now.ToString( "dd.MM.yyyy HH:mm:ss.ffff" )}" + Environment.NewLine );
        }
    }

    Bei mit stehen nach Aufruf dieser Methode wie erwartet 10 Zeilen in der Datei.

    Nachtrag: Kann es sein, dass File.Exists bei dir immer False ergibt und deswegen immer wieder File.Create ausgeführt wird? (Oder die Datei wird ggfs. irgendwoanders gelöscht bzw. neu erstellt).

    So oder so: Das brauchst Du bei AppendAllText nicht. Dort wird, wie schon geschrieben, die Datei automatisch erstellt, wenn sie noch nicht vorhanden ist.

     


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET (2001-2018)
    https://www.asp-solutions.de/ - IT Beratung, Softwareentwicklung, Remotesupport


    Freitag, 23. November 2018 17:21
    Moderator

Alle Antworten

  • Hi,

    das lässt sich mit dem Codeauszug nicht sagen. Ich würde annehmen, dass irgendwo eine Klammerung nicht stimmt.

    Das solltest Du aber doch recht einfach mit einem Breakpoint an der entsprechenden Stelle herausfinden, ob der Code überhaupt durchlaufen wird oder nicht.


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET (2001-2018)
    https://www.asp-solutions.de/ - IT Beratung, Softwareentwicklung, Remotesupport

    Donnerstag, 22. November 2018 10:43
    Moderator
  • Natürlich ist mir Debugging nicht unbekannt. Er springt in die Exception rein und führt auch die Methode FileAppendAll() aus. Allerdings wird nix in die Textdatei geschrieben, zumindest nach dem ersten Eintrag nicht mehr. Habe das deswegen wie folgt programmiert, damit klappt es zwar. Dennoch bin ich mehr als frappiert!

    Hier die Variante, mit der es klappt:

           } catch(Exception error) {
                    using(StreamWriter sw = File.AppendText(path)) {
                        sw.WriteLine(DateTime.Now.ToLongTimeString() + "  " + "Err in showHexToolStripMenuItem_Click:");
                        sw.WriteLine(error.ToString());
                    }
                    string ausgabe = "Fehlermeldung wurde in " + path + " gesichert!";
                    this.Message(ausgabe, "Error", MessageBoxIcon.Error);
                }


    • Bearbeitet tklustig Freitag, 23. November 2018 15:43
    Freitag, 23. November 2018 15:41
  • Hi,

    File.AppendAllText erstellt die Datei, wenn sie noch nicht vorhanden sein sollte und schreibt den gegebenen Inhalt dann ans Ende der Datei.

    Ich kann da auch keinen Fehler feststellen, daher denke ich immer noch, dass es an deinem Code liegt.

    Evtl. ist die Datei, die Du in "path" angibst, anderweitig im Zugriff.

    Führ das hier mal bitte in deiner Anwendung aus. Einmal mit deinem Pfad, einmal mit einem, der definitiv nicht anderweitig verwendet wird.

    private void WriteFile()
    {
        for( Int16 i = 0; i < 10; i++ ) {
            File.AppendAllText( @"X:\Ordner\Datei.txt", $"Hallo Welt - {DateTime.Now.ToString( "dd.MM.yyyy HH:mm:ss.ffff" )}" + Environment.NewLine );
        }
    }

    Bei mit stehen nach Aufruf dieser Methode wie erwartet 10 Zeilen in der Datei.

    Nachtrag: Kann es sein, dass File.Exists bei dir immer False ergibt und deswegen immer wieder File.Create ausgeführt wird? (Oder die Datei wird ggfs. irgendwoanders gelöscht bzw. neu erstellt).

    So oder so: Das brauchst Du bei AppendAllText nicht. Dort wird, wie schon geschrieben, die Datei automatisch erstellt, wenn sie noch nicht vorhanden ist.

     


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET (2001-2018)
    https://www.asp-solutions.de/ - IT Beratung, Softwareentwicklung, Remotesupport


    Freitag, 23. November 2018 17:21
    Moderator
  • Hi,
    ich kann Stefan nur beipflichten. Hier mal eine Konsolen-Demo ohne Schleife im catch-Block, die aber genau das gleiche Ergebnis bringt wie bei Stefan:

    using System;
    using System.IO;
    
    namespace ConsoleApp1
    {
      class Program1
      {
        static void Main(string[] args)
        {
          try
          {
            Demo c = new Demo();
            c.Execute();
          }
          catch (Exception ex) { Console.WriteLine(ex.ToString()); }
          Console.WriteLine("Fertig, Abschluss mit beliebiger Taste");
          Console.ReadKey();
        }
    
        class Demo
        {
          internal void Execute()
          {
            for (int i = 1; i < 10; i++)
            {
              try
              {
                throw new Exception();
              }
              catch (Exception)
              {
                File.AppendAllText(@"c:\temp\x9.txt", $"Hallo Welt - {DateTime.Now.ToString("dd.MM.yyyy HH:mm:ss.ffff")}" + Environment.NewLine);
              }
            }
          }
        }
      }
    }
    


    --
    Viele Grüsse
    Peter Fleischer (ehem. MVP für Developer Technologies)
    Meine Homepage mit Tipps und Tricks

    Freitag, 23. November 2018 17:35