Seite 1 von 2
Programm erzeugt keine Datei
Verfasst: Do Mai 21, 2020 8:00 pm
von pratio
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
Re: Programm erzeugt keine Datei
Verfasst: Fr Mai 22, 2020 7:53 am
von nufan
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:
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

Re: Programm erzeugt keine Datei
Verfasst: Fr Mai 22, 2020 1:08 pm
von Xin
Bitte benutz als Mode mal "w+" statt nur "w".
Re: Programm erzeugt keine Datei
Verfasst: Fr Mai 22, 2020 3:06 pm
von pratio
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
Re: Programm erzeugt keine Datei
Verfasst: Fr Mai 22, 2020 3:23 pm
von Xin
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.
Re: Programm erzeugt keine Datei
Verfasst: Fr Mai 22, 2020 3:29 pm
von pratio
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
Re: Programm erzeugt keine Datei
Verfasst: Fr Mai 22, 2020 3:48 pm
von Xin
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"
Re: Programm erzeugt keine Datei
Verfasst: Fr Mai 22, 2020 4:29 pm
von pratio
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
Re: Programm erzeugt keine Datei
Verfasst: Fr Mai 22, 2020 5:04 pm
von Xin
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.
Re: Programm erzeugt keine Datei
Verfasst: Fr Mai 22, 2020 5:30 pm
von pratio
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