Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

fopen mit Pfad

Empfohlene Antworten

Veröffentlicht

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...

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)

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"

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.

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");


	}; 

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?

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

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 :)

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.