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
Uhrzeit Ausgabe nicht aktuell
lnino
myCSharp.de - Member



Dabei seit:
Beiträge: 24
Herkunft: Innsbruck - Tirol

Themenstarter:

Uhrzeit Ausgabe nicht aktuell

beantworten | zitieren | melden

Hi an alle.

Ich möchte ein Log meiner Applikation schreiben und dabei Zeilenweise den abgearbeiteten Befehl in eine Textdatei schreiben.

Die Funktion an sich funktioniert super, nur zeigt er mir in jeder Zeile die gleiche Uhrzeit an. Wie kann ich die aktualisieren, oder was habe ich bei meinem Ansatz falsch gemacht?


DateTime aktuell = DateTime.Now;
string LogFile = "logfile.txt";

public void AppendLogFile(string sFilename, string sLines)
{
     StreamWriter myFile = new StreamWriter(sFilename, true);
     myFile.Write(sLines);
     myFile.Close();
}

AppendLogFile(LogFile, aktuell.Date.Day + "." + aktuell.Date.Month + "." + aktuell.Date.Year + "-" + aktuell.TimeOfDay.Hours + ":" + aktuell.TimeOfDay.Minutes + ":" + aktuell.TimeOfDay.Seconds + "TEST" + "\r\n");
private Nachricht | Beiträge des Benutzers
m0rius
myCSharp.de - Member

Avatar #avatar-3125.png


Dabei seit:
Beiträge: 1043

beantworten | zitieren | melden

Hallo lnino,

du initialisierst aktuell zwar einmal mit dem Zeitstempel DateTime.Now, allerdings aktualisierst du den Wert nicht. Daher wird beim Aufruf der Methode AppendLogFile immer auf den gleichen Wert zugegriffen.

m0rius
Mein Blog: blog.mariusschulz.com
Hochwertige Malerarbeiten in Magdeburg und Umgebung: M'Decor, Ihr Maler für Magdeburg
private Nachricht | Beiträge des Benutzers
winSharp93
myCSharp.de - Experte

Avatar #avatar-2918.png


Dabei seit:
Beiträge: 6155
Herkunft: Stuttgart

beantworten | zitieren | melden

Zitat von lnino


AppendLogFile(LogFile, aktuell.Date.Day + "." + aktuell.Date.Month + "." + aktuell.Date.Year + "-" + aktuell.TimeOfDay.Hours + ":" + aktuell.TimeOfDay.Minutes + ":" + aktuell.TimeOfDay.Seconds + "TEST" + "\r\n");
BTW: Das ist äußerst unschön: Schaue dir einmal die Überladungen von String.Format bzw. von DateTime.ToString an.
private Nachricht | Beiträge des Benutzers
lnino
myCSharp.de - Member



Dabei seit:
Beiträge: 24
Herkunft: Innsbruck - Tirol

Themenstarter:

beantworten | zitieren | melden

Hi m0rius.

Danke für den Hinweis.

Habe nun vor dem schreiben in die Textdatei mittels....

aktuell = DateTime.Now

...die Uhrzeit aktualisiert.
private Nachricht | Beiträge des Benutzers
m0rius
myCSharp.de - Member

Avatar #avatar-3125.png


Dabei seit:
Beiträge: 1043

beantworten | zitieren | melden

Hallo lnino,

zeig uns doch nochmal deinen Code, wie er jetzt aussieht!

m0rius
Mein Blog: blog.mariusschulz.com
Hochwertige Malerarbeiten in Magdeburg und Umgebung: M'Decor, Ihr Maler für Magdeburg
private Nachricht | Beiträge des Benutzers
lnino
myCSharp.de - Member



Dabei seit:
Beiträge: 24
Herkunft: Innsbruck - Tirol

Themenstarter:

beantworten | zitieren | melden

DateTime aktuell = DateTime.Now;
string LogFile = "logfile.txt";

public void AppendLogFile(string sFilename, string sLines)
{
     StreamWriter myFile = new StreamWriter(sFilename, true);
     myFile.Write(sLines);
     myFile.Close();
}
aktuell = DateTime.Now;

AppendLogFile(LogFile, aktuell.Date.Day + "." + aktuell.Date.Month + "." + aktuell.Date.Year + "-" + aktuell.TimeOfDay.Hours + ":" + aktuell.TimeOfDay.Minutes + ":" + aktuell.TimeOfDay.Seconds + "TEST" + "\r\n");

Ist zwar noch immer unschön, aber funktioniert.

Was mir dabei aber aufgefallen ist, dass es bei der Uhrzeit keine führenden Nullen gibt. Ist das normal, oder kann ich das irgendwie anpassen?

Es wird nämlich so dargestellt: 12:5:3 anstelle von 12:05:03
private Nachricht | Beiträge des Benutzers
chilic
myCSharp.de - Experte



Dabei seit:
Beiträge: 2137

beantworten | zitieren | melden

Das funktioniert so aber eher nicht, wie es da steht?! Bei den Zahlen fehlt ToSstring().
Und ja, ist immer noch unschön.
Immer noch der Hinweis, dir mal DateTime.ToString anzusehen. Damit kriegst du die Werte nämlich zweistellig hin.
private Nachricht | Beiträge des Benutzers
m0rius
myCSharp.de - Member

Avatar #avatar-3125.png


Dabei seit:
Beiträge: 1043

beantworten | zitieren | melden

Hallo lnino,

schön, dass es jetzt funktioniert. Ich würde dir allerdings wirklich raten, dich mit winSharp93s Hinweis auseinanderzusetzen und die für die Datumsformatierung vom .NET-Framework vorgesehen Klassen zu verwenden.


Hallo chilic,

nein, die Zahlen müssen nicht explizit mit ToString() in einen String konvertiert werden. Durch die Verkettung der Strings mit dem "+"-Operator ist das nicht nötig.

m0rius
Mein Blog: blog.mariusschulz.com
Hochwertige Malerarbeiten in Magdeburg und Umgebung: M'Decor, Ihr Maler für Magdeburg
private Nachricht | Beiträge des Benutzers
lnino
myCSharp.de - Member



Dabei seit:
Beiträge: 24
Herkunft: Innsbruck - Tirol

Themenstarter:

beantworten | zitieren | melden

Zitat von lnino
Was mir dabei aber aufgefallen ist, dass es bei der Uhrzeit keine führenden Nullen gibt. Ist das normal, oder kann ich das irgendwie anpassen?

Es wird nämlich so dargestellt: 12:5:3 anstelle von 12:05:03

Hat von euch jemand für das obenstehende Problem mit den fehlenden führenden Nullen eine Erklärung? Ich komm da nicht dahinter.

P.s.: Werde mich anschließend an die saubere Gestaltung meines Codes machen. :-)
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von lnino am .
private Nachricht | Beiträge des Benutzers
winSharp93
myCSharp.de - Experte

Avatar #avatar-2918.png


Dabei seit:
Beiträge: 6155
Herkunft: Stuttgart

beantworten | zitieren | melden

Hallo lnino,
Zitat
Hat von euch jemand für das obenstehende Problem mit den fehlenden führenden Nullen eine Erklärung?
Das kannst du durch Verwendung der - inzwischen mehrfach genannten - ToString-Methode von DateTime lösen.
Dass ein einfaches Int32.ToString (was durch die Verkettung mit dem +-Operator) implizit aufgerufen wird, keine führenden 0er hinzufügt, ist auch sehr sinnvoll: Im Prinzip könnte ja man beliebig viele anhängen - woher sollte da klar sein, nach wie vielen 0ern Schluss sein sollte.

Aber so etwas fällt unter die Grundlagen. Wärst du den zahlreichen Hinweisen nachgegangen und hättest einen Blick in die Doku geworfen, hättest du das Problem sehr schnell selbst lösen können. Siehe [Hinweis] Wie poste ich richtig?

==> Geschlossen
private Nachricht | Beiträge des Benutzers