Variabler Dateiname in fopen

dyed5

Grünschnabel
Hallo Community,
ich programmiere gerade ein Programm, was mir eine Datei erstellen soll und danach wieder einlesen soll.
Das funktioniert so weit auch gut, aber ich will das nun Programm erweitern.
Die Erweiterung soll so aussehen, dass ich in der Konsole den Dateinamen eingeben kann und je nach Funktion ( die Funktion kann man im Switch case auswählen) soll eine Datei erstellt oder geöffnet werden.

Ich hänge jetzt schon eine Weile an dem Fehler, welchen ich nach recherche im Netz nicht beheben konnte und ich hoffe ihr könnt mir nun weiterhelfen.

Ich benutze Windows 8 mit Visual Studio 2013 Express.

Folgende Code für das öffnen der Datei:

Code:
void openFile()
{
	
	FILE *datei;
	int c;
	char text[100];



	printf("\nComputer: Bitte geben Sie eine Datei an (20 Zeichen):\n");
	gets_s(text);
	

	fopen_s(&datei, text, "r");

	if (datei == NULL)
	{
		printf("Computer: Datei nicht gefunden!\n");
	}
	else
	{
		while (!feof(datei))
		{

			c = fgetc(datei); 

			putchar(c);   



		}
		fclose(datei);
	}

}

Folgender Code für das erstellen einer Datei:

Code:
void createFile()
{
	FILE *datei;

	
	char text[100];
	
	printf("\nComputer: Bitte geben Sie ein Dateinamen ein (20 Zeichen):\n");
	scanf_s("%s",text);

	fopen_s(&datei, text, "w");
	
	fclose(datei);
	
}

Folgende Fehlermeldung bekomme ich (nach fehlerfreien Compilieren) und aufruf der Funktion (createFile()) durch Swich Case:


Ausnahmefehler bei 0x54FB3FD4 (msvcr120d.dll) in dateiuebung.exe: 0xC0000005: Zugriffsverletzung beim Schreiben an Position 0x01070000

Ausnahmefehler bei 0xFEFEFEFE in dateiuebung.exe: 0xC00001A5: Eine ungültige Ausnahmebehandlungsroutine wurde gefunden (Parameter: 0x00000003)


Ich habe auch schon nach den Fehlermeldungen im Netz gesucht, aber hab nichts gefunden, was mir weiterhelfen könnte.

Mit freundlichen Grüßen dyed5
 
Zuletzt bearbeitet:
Hi

Warum liest du den Dateinamen beim Lesen/Erstellen auf verschiedene Arten ein?
scanf mit %s macht nicht (immer) das Selbe.

Zum Fehler selbst: Allgemeine Lösung gibts da nicht,
weil man den eigentlichen Fehler daran nicht sieht.
Mit dem Debugger die Stelle vom Absturz herausfinden wäre ein guter erster Schritt.

In deinem Fall ist es vermutlich das fclose: Das Erstellen der Datei kann
(genauso wie das Öffnen zum Lesen) danebengehen.
Wenn es nicht funktioniert hat darf kein fclose gemacht werden.

Warum es nicht funktioniert könnte:
a) Der Dateiname könnte durch scanf mit %s eventuell etwas Anderes sein als erwartet.
b) Das Verzeichnis gibts nicht (fopen macht maximal neue Dateien,
aber keine neuen Ordner für neue Dateien dazu.)
c) Zugriffsrechte (Windows erlaubt nicht jedem Benutzer Schreibzugriffe überall hin)
...

Siehe errno zum Herausfinden vom Grund.
 
Zuletzt bearbeitet:
C:
scanf_s("%99s",text,100);

Getestet, aber ohne Verbesserung. Danke trotzdem!

Warum liest du den Dateinamen beim Lesen/Erstellen auf verschiedene Arten ein?
scanf mit %s macht nicht (immer) das Selbe.

Ich hab verschiedene Eingabemöglichkeiten getestet. Das war der letzte Teststand.

b) Das Verzeichnis gibts nicht (fopen macht maximal neue Dateien,
aber keine neuen Ordner für neue Dateien dazu.)

Es sollen ja auch nur Dateien erstellt werden und keine Ordner.

c) Zugriffsrechte (Windows erlaubt nicht jedem Benutzer Schreibzugriffe überall hin)

Das Problem ist ja das es Funktioniert, sobald man den Dateinamen nicht variabel macht. Also man gibt den Dateinamen schon im Quellcode ein.

a) Der Dateiname könnte durch scanf mit %s eventuell etwas Anderes sein als erwartet.

Ich weiß nicht genau, was du damit meinst.


Hat den jemand die selben Probleme wie ich oder bin ich nur ein "Einzelfall".

Ich bedanke mich für eure Hilfe!



------------------------------------------------

NACHTRAG:

Das selbe Problem tretet bei anderen Programmen auch auf.
Immer dann wenn ich scanf_s benutze!
Weiß jemand eine Möglichkeit das Problem zu lösen?
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück