fopen() datei nicht erstellt
-
Und so schreibt man es kürzer...
-
Das ist C++, kein C. C kennt weder cout noch endl.
-
OH, stimmt ja.
-
Vielen Dank, habe mich schon gewundert warum der Code im Forum blau hervorgehoben wird.
Ich wollte jetzt die Textzeile auslesen und ausgeben, aber er gibt mir komische Zeichen aus. Ich habe den String dann nullterminiert aber das funktioniert auch nicht.
int main(){ // --- File erzeugen-------------------------------------- FILE *log; char ausgabe[100+1]; if( (log = fopen("C:/Users/XXX/Desktop/Testfile.txt","w")) == NULL){ cout << "Fehler " << GetLastError() << endl; } // --- Pufferung ausschalten------------------------------- setvbuf(log,NULL,_IONBF,0); // --- etwas schreiben ------------------------------------- fprintf(log,"Testzeile"); fseek(log,0,SEEK_END);//pointer auf anfang //Lesen und Ausgabe des Textes fscanf (log, "%d", &ausgabe); ausgabe[100] = '\0'; printf ("%s\n", ausgabe); // --- File schliessen-------------------------------------- fclose(log); getchar(); return 0; }
-
Das kann nur schiefgehen:
fscanf (log, "%d", &ausgabe);
Liest einen Integer - in Form eines Strings - aus der Datei und packt ihn binär(!) in ein char array - als 4 char. (Vorausgesetzt int ist 32 Bit)
printf ("%s\n", ausgabe);
Gibt diese Zeichen dann aus - die anderen 96 Zeichen sind zufällig, da wird nichts sinnvolles stehen
-
Du öffnest das Logfile, im Write-Modus; Inhalt wird komplett gelöscht.
Anschließend schreibst du da etwas hinein.
Dann versuchst du einen int auszulesen. Im Write-Modus geht das nciht, außerdem exisitiert kein int in der Datei!
Die komischen Zeichen, sind die die zufälligerweise an der Speicheradresse standen, wo du dein char abgelegt hast.
Und was zur Hölle willst du mit FILE?
Nutze i/ofstream der C++ Standardbibliothek!
-
wenn du schreiben und lesen willst musst du Datei entsprechend öffnen
ich denke "w+" ist hier das richtige
für das einlesen einer zeile verwendest du am besten fgets
warum deaktivierst du die pufferungwarum benutzt du nicht die C++ iostream sachen die sind komfortabler
-
Das funktioniert trotzdem nicht. Wie kann ich lesen bis zu "/0" und dann ausgeben? Ich glaub das ist weil er den ganzen Char mit 100bytes ausgibt. Hier noch mal der Code:
int main(){ // --- File erzeugen-------------------------------------- FILE *log; char ausgabe[100+1]; if( (log = fopen("C:/Users/XXX/Desktop/Testfile.txt","w+")) == NULL){ cout << "Fehler " << GetLastError() << endl; } // --- Pufferung ausschalten------------------------------- setvbuf(log,NULL,_IONBF,0); // --- etwas schreiben ------------------------------------- fprintf(log,"%s","Testzeile"); //%8d %8d %8d %8d",156,2233,1267,67); fseek(log,0,SEEK_END);//pointer auf anfang //Lesen und Ausgabe des Textes fgets(ausgabe, 0, log); ausgabe[100] = '\0'; printf ("%s\n", ausgabe); // --- File schliessen-------------------------------------- fclose(log); getchar(); return 0; }
Pufferung benutze ich nicht, weil ich mit Log-dateien arbeite.
-
http://man.cx/?page=fgets&do[go]=go lesen nicht überfliegen
"/0" wiso du schreibst das doch nirgendwo in die Datei
falls du '\0' meinst dann gilt das gleicheausgabe[100] = '\0';
ist überflüssig
warum testest du in Zeile 5 auf den fehler wenn du ihn sowiso nicht vernünftig behandelst
-
Der Inhalt deines Files wird mit fprinft() überschrieben!
Danach gibts da ncihts mehr, was gelesen werden kann!
-
Nathan schreibe kein quatsch
so hier ein kleines C (!= C++) Programm#include <stdlib.h> #include <stdio.h> int main(void) { char line [101]; //öffnet die datei zum lesen und schreiben oder erstellt eine neue //falls Datei vorhanden dann wird inhalt der datei gelöscht FILE *log = fopen("log", "w+"); if(log == NULL) { perror("openfile: log"); return EXIT_FAILURE; } //deaktiviere Pufferung setbuf(log, NULL); //schreibt Test in die Datei fputs("Test", log); //setze position in Datei auf Anfang rewind(log); //liest inhalt der Datei bis EOF oder \n fgets(line, sizeof(line), log); //gibt inhalt von line und \n aus puts(line); fclose(log); return EXIT_SUCCESS; }
-
Ah sorry, mein Fehler.
Ich dachte der hätte da noch//Lesen und Ausgabe des Textes fscanf (log, "%d", &ausgabe);
wie am Anfang stehen.
-
Erst nochmal vielen Dank für die Hilfe, aber ich habe den Fehler letzendlich entdeckt. Die zufälligen Zeichen wurden dadurch erzeugt das ich den Pointer die ganze Zeit aufs Ende(fseek(log,NULL,SEEK_END);) gesetzt habe und dann natürlich nur quatsch ausgelesen habe. Richtig wäre gewesen *fseek(log,NULL,SEEK_SET);
*int main(){ // --- File erzeugen-------------------------------------- FILE *log; char ausgabe[100]; if( (log = fopen("C:/Users/Deniz/Desktop/Testfile.txt","w+")) == NULL){ cout << "Fehler " << GetLastError() << endl; } // --- Pufferung ausschalten------------------------------- setvbuf(log,NULL,_IONBF,0); // --- etwas schreiben ------------------------------------- fprintf(log,"%s","Testzeile");//fputs("Testzeile",log); fseek(log,NULL,SEEK_SET);//rewind(log);//pointer auf anfang //Lesen und Ausgabe des Textes fgets(ausgabe, sizeof(ausgabe), log); printf ("%s\n", ausgabe); //puts(ausgabe); // --- File schliessen-------------------------------------- fclose(log); getchar(); return 0;
-
Trotzdem: Schaue dir die C++ fstreams an. Die sind viel einfacher und intuitiver.
Wie cout/cin können sie verwendet werden.