Jonsc1 Geschrieben 4. Januar 2006 Teilen Geschrieben 4. Januar 2006 Moin Moin... Habe mir eine Logfile Klasse geschrieben die beim Erzeugen eines Objekts der Klasse Logfile automatisch (mit fopen) ein Logfile im Verzeichniss der Exe-Datei erstellt. Jetzt möchte ich aber einen anderen Pfad verwenden, zum Beispiel "/Logfile/Logfile.html" ... wenn ich dies an den Befehl fopen übergebe: m_Logfile = fopen ("/Logfile/Logfile.html", "w"); ... erhalte ich eine Assertion und das Programm bricht ab. Kann mir jemand sagen wie ich das anstelle? Hab schon bei Google etc. und mit der Forensuche gesucht aber nichts passendes gefunden... Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 4. Januar 2006 Teilen Geschrieben 4. Januar 2006 Wie lautet denn die Assertion genau? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Jonsc1 Geschrieben 4. Januar 2006 Autor Teilen Geschrieben 4. Januar 2006 Folgendes wird ausgegeben: Debug Assertion Failed! Program: [Der Pfad der Exe] File: fprintf.c Line 56 Expression: str != NULL For Information on how your program can cause an assertion failure, see the Visual C++ documentation on asserts. (Press Retry to debug the application) Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 4. Januar 2006 Teilen Geschrieben 4. Januar 2006 Offenbar prüfst du nicht, ob dein Aufruf von fopen überhaupt erfolgreich war, und rufst dann fprintf mit einem ungültigen FILE* auf. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Jonsc1 Geschrieben 4. Januar 2006 Autor Teilen Geschrieben 4. Januar 2006 Tja, der Witz an der Sache ist: Wenn ich den Parameter von fopen verändere (also statt nem Pfad einfach nur "logfile.html" schreibe) funtzt alles bestens! Will aber nunmal nicht im Verzeichniss der Exe das Logfile erstellen, sondern im Unterordner "Logfile" Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 4. Januar 2006 Teilen Geschrieben 4. Januar 2006 Wenn ich den Parameter von fopen verändere (also statt nem Pfad einfach nur "logfile.html" schreibe) funtzt alles bestens!Vermutlich, weil fopen dann nicht fehlschlägt. Wenn kein Auto kommt, "funzt" auch bei Rot über die Straße gehen. Eine Fehlerprüfung wäre also auf jeden Fall angebracht. Will aber nunmal nicht im Verzeichniss der Exe das Logfile erstellen, sondern im Unterordner "Logfile"Dann solltest du vielleicht einen relativen Pfad benutzen. Der fängt im Allgemeinen nicht mit einem Schrägstrich an. Denk aber daran, dass sich relative Pfade auf das aktuelle Arbeitsverzeichnis deines Programms beziehen. Das muss nicht das Verzeichnis sein, in dem sich die ausführbare Datei befindet. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Jonsc1 Geschrieben 4. Januar 2006 Autor Teilen Geschrieben 4. Januar 2006 kannst du mir ein kleines Stück Beispielcode geben? Dem besseren Verständniss wegen poste ich einfach mal meinen Konstruktor: CLogfile::CLogfile(const char *LogName) //Aufgabe: Logfile erzeugen { //Logfile leeren und Kopf schreiben m_Logfile = fopen ("/Logfile/Logfile.html", "w"); fett_text (LogName); absatz(); absatz(); fflush (m_Logfile); //Aktuelle BuildKonfiguration ausgeben #ifdef _DEBUG fett_text("Buildversion: "); eingerueckt_text ("DEBUG"); #else fett_text("Buildversion: "); eingerueckt_text ("RELEASE"); #endif //Logfile schliessen und mit append wieder öffnen fclose (m_Logfile); m_Logfile = fopen ("/Logfile/Logfile.html", "a"); }; Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Jonsc1 Geschrieben 4. Januar 2006 Autor Teilen Geschrieben 4. Januar 2006 Mit einer absoluten Pfadangabe (z.B. "m:/test/Logfile.html") funktioniert es bestens... nur die relative Pfadangabe will nicht so... Gibt es also eine Möglichkeit das mit relativer Pfadangabe zu machen? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Jonsc1 Geschrieben 4. Januar 2006 Autor Teilen Geschrieben 4. Januar 2006 Ok... Problem gelöst! Der relative Pfad muss in dieser Form angegeben werden: "Test/Logfile.html"... Danke Klotzkopp für die Mühe mit mir lg Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 5. Januar 2006 Teilen Geschrieben 5. Januar 2006 Gern geschehen Trotzdem solltest du immer prüfen, ob fopen erfolgreich war. Es gibt auch Gründe für ein Fehlschlagen, die nicht in deinem Code liegen. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
sayso Geschrieben 6. Januar 2006 Teilen Geschrieben 6. Januar 2006 Gern geschehen Trotzdem solltest du immer prüfen, ob fopen erfolgreich war. Es gibt auch Gründe für ein Fehlschlagen, die nicht in deinem Code liegen. Richtig Das Problem beim fopen lag an der Pfadangabe: Da der Ordner Logfile unter / nicht exisitierte bzw. du die Berechtigungen nicht hast, das File in dem Order zu erzeugen , geht der fopen schief. Hier solltest du prüfen ob du berechtigt bist, um Dateien zu erzeugen bzw. zu lesen und dann erst den fopen durchzuführen. (den fopen natürlich auch mit Prüfung) Ok... Problem gelöst! Der relative Pfad muss in dieser Form angegeben werden: "Test/Logfile.html"... ACHTUNG: Solch ein Coding ist ein erhebliches Sicherheitsrisiko. Wenn das Programm später mal unter einem User läuft der "wichtige" Systemberechtigungen hat (evtl. mit s-Bit) dann kann man mit so einem fopen das System manipulieren. 1. Durch verschieben des Binaries 2. Durch erzeugen von Symlinks auf Test/Logfile.html 3. etc.. Bitte verwende absolute Pfadangaben wie z.B. /meinprogram/Test/Logfile.html Nur ein Tipp Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.