Programm erzeugt keine Datei

Schnelle objektorientierte, kompilierende Programmiersprache.
pratio
Beiträge: 5
Registriert: Do Mai 21, 2020 7:39 pm

Programm erzeugt keine Datei

Beitrag von pratio » Do Mai 21, 2020 8:00 pm

Hallo,

und zwar habe ich folgendes Problem. Ich möchte gerne über die DOS Konsole ein Programm, welches ich in C geschrieben habe öffnen. Dies funktioniert so weit auch. Jedoch soll das Programm eine Textdatei erstellen. Diese Textdatei wird beim Aufruf über die Konsole jedoch nicht erstellt. Über den Debugger im Programm selbst funktioniert dies aber einwandfrei. Hat jemand eine Idee woran dies liegen könnte?
Unbenannt.PNG
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

nufan
Wiki-Moderator
Beiträge: 2476
Registriert: Sa Jul 05, 2008 3:21 pm

Re: Programm erzeugt keine Datei

Beitrag von nufan » Fr Mai 22, 2020 7:53 am

Hallo pratio!

Ich würde dir empfehlen Debug-Ausgaben zwischen den fopen() und fprintf() Aufrufen einzufügen:

Code: Alles auswählen

if (fp == NULL)
    printf("error creating file: %s\n", strerror(errno));
else
    printf("file created successfully\n");
Dafür brauchst du noch folgende beiden Includes:

Code: Alles auswählen

#include <string.h>
#include <errno.h>
Eventuell suchst du nicht im richtigen Verzeichnis? Die Datei wird im aktuellen Arbeitsverzeichnis angelegt, das ist (besonders wenn du eine Entwicklungsumgebung verwendest) nicht notwendigerweise das Verzeichnis in dem das von dir erstellte Programm liegt.

Ansonsten möchte ich dich bitten deinen Code vollständig als Text zwischen Code-Tags zu posten. Bei Bildern müssen andere deinen Code erst abtippen, um ihn testen zu können :)

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8559
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Programm erzeugt keine Datei

Beitrag von Xin » Fr Mai 22, 2020 1:08 pm

Bitte benutz als Mode mal "w+" statt nur "w".
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

pratio
Beiträge: 5
Registriert: Do Mai 21, 2020 7:39 pm

Re: Programm erzeugt keine Datei

Beitrag von pratio » Fr Mai 22, 2020 3:06 pm

Vielen Dank schon mal für eure Hilfe.
@nufan "file created sucessfully" wurde zwar ausgegeben, aber eine Datei wurde trotzdem nicht erstellt
@Xin das w+ hatte leider keine Auswirkungen auf die Erstellung der Datei

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8559
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Programm erzeugt keine Datei

Beitrag von Xin » Fr Mai 22, 2020 3:23 pm

Das ergibt so keinen Sinn.

In welchem Verzeichnis rufst Du das Exe auf...?
Kopier mal den Inhalt der DOS-Box bitte in die Antwort. Ruf das Exe auf und anschließend mal "dir test.txt". Alles kopieren, inkl. dem, was vor dem Aufruf des Executables steht, also dem Eingabeprompt.
Wenn die Änderung "file created successfully" ausgegeben wird, können wir davon ausgehen, dass die Datei, die Du aufrufst tatsächlich das neu gebaute Executable ist und Du dort auch Schreibrechte hast.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

pratio
Beiträge: 5
Registriert: Do Mai 21, 2020 7:39 pm

Re: Programm erzeugt keine Datei

Beitrag von pratio » Fr Mai 22, 2020 3:29 pm

Der Code:

Code: Alles auswählen

#include <stdio.h>
#include <errno.h>
#include <stdlib.h>
#include <string.h>
#pragma warning(disable : 4996)

int main()
{
	FILE* fp;
	char filename[] = "test.txt";
	char mode[] = "w";
	fp = fopen(filename, mode);

	if (fp == NULL)
		printf("error creating file: %s\n", strerror(errno));
	else
		printf("file created successfully\n");

	fprintf(fp,"please write this: hallo");
	fclose(fp);
}
DOS-Konsole:

Code: Alles auswählen

C:\Users\User>C:\Users\User\Documents\Allgemein\C-Programme\Dateien_beschreiben\Dateien_beschreibensll\Debug\Dateien_beschreiben.exe
file created successfully
Edit by Xin: CodeTags hinzugefügt

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8559
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Programm erzeugt keine Datei

Beitrag von Xin » Fr Mai 22, 2020 3:48 pm

Dann guck jetzt bitte mal in C:\Users\User - da sollte die Datei liegen. Das ist das Verzeichnis in dem die test.txt liegt.
Wie gesagt: "dir test.txt"
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

pratio
Beiträge: 5
Registriert: Do Mai 21, 2020 7:39 pm

Re: Programm erzeugt keine Datei

Beitrag von pratio » Fr Mai 22, 2020 4:29 pm

C:\Users\User>dir test.txt
Datenträger in Laufwerk C: ist Windows10
Volumeseriennummer: ACAE-75BD

Verzeichnis von C:\Users\User

22.05.2020 17:27 24 test.txt
1 Datei(en), 24 Bytes
0 Verzeichnis(se), 424.962.396.160 Bytes frei

Das kommt da jetzt, aber ich weiß nicht in welchem Verzeichnis das jetzt sein soll

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8559
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Programm erzeugt keine Datei

Beitrag von Xin » Fr Mai 22, 2020 5:04 pm

pratio hat geschrieben:
Fr Mai 22, 2020 4:29 pm
Das kommt da jetzt, aber ich weiß nicht in welchem Verzeichnis das jetzt sein soll
Na, in dem Verzeichnis, in dem die Shell ist, während Du das Programm aufrufst, was sich in einem ganz anderen Verzeichnis befindet. Deswegen hast Du ja auch den Pfad vor der Exe. Aber das Ausführungsverzeichnis steht in der DOS-Box vor dem Befehl: "C:\Users\User>"

Wenn Du "dir" aufrufst wird das ja auch nicht da aufgerufen, wo das Programm dir.exe steht, sondern arbeitet sich in dem Verzeichnis durch, in dem die DOS-Box steht.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

pratio
Beiträge: 5
Registriert: Do Mai 21, 2020 7:39 pm

Re: Programm erzeugt keine Datei

Beitrag von pratio » Fr Mai 22, 2020 5:30 pm

Du bist der beste, ich habe es jetzt. Vielen Dank.
Ich hätte noch eine kleinere weitere Frage, wenn es ok ist. Und zwar würde ich gerne den Namen der Datei auch über die Konsole eingeben können. Überlegt habe ich mir folgendes:

Code: Alles auswählen

int main(int argc, char** argv[])
{
	FILE* fp;
	char filename[] = argv[1];
	char mode[] = "w";
	fp = fopen(filename, mode);

	if (fp == NULL)
		printf("error creating file: %s\n", strerror(errno));
	else
		printf("file created successfully\n");

	fprintf(fp,"please write this: hallo");
	fclose(fp);
}
Die Übergabe an das filename funktioniert aber nicht und ich weiß nicht, wie ich das argv[1] an das filiname[] richtig übergebe

Edit by Xin: CodeTags eingefügt

Antworten