TSaveDialog "blockiert" ofstream
-
Also in meinem neusten Projekt tritt ein merkwürdiges Problem auf.
Ich benutze eine selbst geschriebene Logbuchklasse zum Erstellen eines Logs, um etwaige Statusmeldungen und Fehler auszugeben. Dazu benutze ich ofstream, aus der Standard C++ Library. Diese Logbuchklasse funktioniert auch so wie sie soll und ist bereits durch andere Projekte erprobt.
Vielleicht fragen sich einige jetzt, "warum benutzt er überhaupt ofstream und nicht die Klassen, die die VCL zur Verfügung stellt?". Ehrlich gesagt setze ich zum Einen sehr gerne meine eigenen Klassen ein und des Weiteren bin ich nicht erpischt darauf einfach für jedes Projekt neue Klassen aufzusetzen, zumal ich die Log Klasse nicht nur mit dem C++ Builder verwende, sondern auch mit wxDevC++ . Soviel dazu. Nun zum eigentlichen Problem.Wenn ich einen SaveDialog in mein Projekt einbaue, also die Klasse TSaveDialog verwende, um den Benutzer eine Datei zum Speichern angeben zu lassen, dann funktioniert dies auch, der Benutzer gibt also die Datei an, jedoch ab dem Moment, ab dem der SaveDialog geöffnet wurde, schreibt mein Logbuch keinen einzigen Eintrag mehr, unabhängig davon in welchem Programmteil es aufgerufen wird. Es schreibt also gar nichts mehr. Es scheint als würde der SaveDialog das ofstream Objekt blockieren.
Noch merkwürdiger ist das alles durch den Fakt, dass wenn ich beim SaveDialog die klassische Darstellung aktiviere, das Log wieder funktioniert, es also die gewünschten Einträge macht. Es scheint also auch irgendwie mit Windows XP zusammenzuhängen. Mmmmmm ehrlich gesagt bin ich mit meinem Latein am Ende, auch unser aller guter Freund Google spuckt mir dazu nichts aus und im Forum habe ich von solch einem Problem auch noch nichts gelesen.
Ich hoffe jemand hier kann mir weiterhelfen.
-
Kann es evtl. mit dem Arbeitsverzeichnis zu tun haben?
Öffnest du jedesmal die Log-Datei neu, wenn du Daten hinzufügst und ist der Dateipfad relativ?Der TSaveDialog (bzw. auch TOpenDialog) ändert nämlich das Arbeitsverzeichnis, sofern nicht Options::ofNoChangeDir gesetzt ist.
-
Interessanter Ansatz, das stimmt. Das Logbuch Verzeichnis ist relativ, immer im Unterordner "log\". Werde das gleich mal überprüfen und dann schauen ob es funktioniert, thx.
EDIT:
Das war es, er hatte mir jedesmal mein Arbeitsverzeichnis geändert, wodurch das Log irgendwo hin, nur nicht in den Unterordner Log geschrieben wurde!