Datei lesen/schreiben

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Datei lesen/schreiben

    Hallo ich schon wieder ;)

    also hab zwar heute schon einen Beitrag geschrieben aber bin grad echt am verzweifeln im Internet finde ich auch nichts hilfreiches:(

    Also ich möchte mit c eine Datei öffnen und diese beschreiben und auslesen habe das nun folgender maßen gemacht :

    Quellcode

    1. #include <stdio.h>
    2. #include <stdlib.h>
    3. int main (void)
    4. {
    5. char string='hallo welt';
    6. char string2;
    7. /*Zeiger FILE enthält informationen zur Datei abwicklung und wie stdio.h definiert*/
    8. FILE * Mem;
    9. /*foben weißt einen Dateistrom zu */
    10. Mem=fopen("memo.txt","w+r");
    11. /*r-nur lesen
    12. w-nur schreiben
    13. r+, w+ zum schreiben und lesen
    14. a- schreiben aber anhängen an die Datei
    15. a+ schreiben und lesen an die Datei wird angehängt
    16. */
    17. /*überprüfen von fopen */
    18. if(Mem==NULL)
    19. {
    20. puts("Fehler beim öffnen von memo.txt");
    21. exit(EXIT_FAILURE);
    22. }
    23. else
    24. {
    25. puts("memo.txt erfolgreich geöffnet");
    26. }
    27. /*Schreiben */
    28. fwrite(string,sizeof(string),20,Mem);
    29. /*Lesen*/
    30. fread(&string2, sizeof(char),20,Mem);
    31. /*Datei schließen*/
    32. fclose(Mem);
    33. return 0;
    34. }
    Alles anzeigen


    so das öffnen scheint zu funzen da ich die entsprechende meldung bekomme nur das schreiben und lesen nicht so da kommt der fehler "segmentation failt" übrigens das Programm sollte einen Text über einen Dialog einlesen ich habe jetzt nur mal Testweiße das so gemacht so nun weiß ich ja es gibt fscanf() fprintf() fput() fget() (glaub die hießen so) fwrite() fread() usw welche von diesen funktionen brauch ich denn nun und wie soll ich diese den Benutzen ???????????? weiß echt nicht mehr weiter die ganzen Beispiele im internet sind nicht sonderlich hilfreich da meist der anwendungsfall anders ist oder die beschreibung unnötig kompliziert ist !

    Mit freundlichen grüßen
  • Soweit ich das C-Anfänger beurteilen kann, sind folgende Fehler vorhanden:
    Zeile 10: Ein String wird als eine Art Char-Array erzeugt. Jedoch wird bei dir ein Char (normalerweise 1 Zeichen) erzeugt, welches aber 10 Zeichen hat. Darauf dürfte dich dein Compiler aber aufmerksam gemacht haben (zumindest hat bei mir der gcc gemeckert).
    Zeile44: Der Parameter der Blockzahl ist falsch. Oder wie kommst du auf 20? Du hast einen Block mit der Größe sizeof(string1). Somit solltest du als Blockzahl 1 statt 20 übergeben. Soweit ich das Sehe kommt die Blockzahl erst bei Arrays, etc. zu tragen.

    Hier mal der verbesserte Quellcode:

    Quellcode

    1. #include <stdio.h>
    2. #include <stdlib.h>
    3. int main (void)
    4. {
    5. char string[] = {"hallo welt"};
    6. char string2;
    7. /*Zeiger FILE enthält informationen zur Datei abwicklung und wie stdio.h definiert*/
    8. FILE * Mem;
    9. /*foben weißt einen Dateistrom zu */
    10. Mem=fopen("memo.txt","w+r");
    11. /*r-nur lesen
    12. w-nur schreiben
    13. r+, w+ zum schreiben und lesen
    14. a- schreiben aber anhängen an die Datei
    15. a+ schreiben und lesen an die Datei wird angehängt
    16. */
    17. /*überprüfen von fopen */
    18. if(Mem==NULL)
    19. {
    20. puts("Fehler beim öffnen von memo.txt");
    21. exit(EXIT_FAILURE);
    22. }
    23. else
    24. {
    25. puts("memo.txt erfolgreich geöffnet");
    26. }
    27. /*Schreiben */
    28. fwrite(string,sizeof(string),1,Mem);
    29. /*Lesen*/
    30. fread(&string2, sizeof(char),1,Mem);
    31. /*Datei schließen*/
    32. fclose(Mem);
    33. return 0;
    34. }
    Alles anzeigen
    Open Source --> Programmieren aus Leidenschaft :!:

    Ich stehe weder für privaten Support per PM noch über einen IM zur Verfügung. Danke.
  • Danke für deine Antwort Deadman !

    Ja du hast recht das sind echt Fehler nun kommt auch nicht mehr Segmentation failt ....... nein der Compiler hat bei mir nicht gemeckert

    leider funzt es trotzdem nicht nun bekomm ich zwar keine Fehler meldung mehr es wird aber immernoch nichts ausgegeben es wird mir nur gesagt "memo.txt wurde erfolgreich geöffnet" das ist alles! keine Ausgabe..... :( also kann jetzt auch nicht sagen ob er überhaupt was in diese Datei schreibt oder nicht trotzdem Danke

    Bin für weitere Vorschläge offen ;)
  • Bin zwar selber nur anfänger aber
    "Mem=fopen("memo.txt","w+r");" gändert in "Mem=fopen("memo.txt","w+");"

    Öffnet und schreibt die daten in die datei.

    Wie man die Datei ausliest schreibe ich gleich mal weil so geht das nicht soweit ich weiß

    EDIT:

    Soo bei mir hat das nur auf diese weise funktioniert ansonsten gings auch nicht
    Ich hoffe das hilft dir.

    Quellcode

    1. #include <stdio.h>
    2. #include <stdlib.h>
    3. int schreiben() {
    4. FILE *f;
    5. char schreibenas[] = "Hallo Welt!";
    6. f=fopen("memo.txt","w+");
    7. if(f==NULL) {
    8. printf("error");
    9. }
    10. else {
    11. fwrite(schreibenas,sizeof(schreibenas),1,f);
    12. fclose(f);
    13. }
    14. }
    15. int lesen() {
    16. FILE *f;
    17. char lesenas[1024];
    18. fopen("memo.txt","r");
    19. if(f==NULL) {
    20. printf("error");
    21. }
    22. else {
    23. while(fgets(lesenas,sizeof(lesenas),f)!=0) {
    24. fputs(lesenas,stdout);
    25. printf("\n");
    26. }
    27. }
    28. }
    29. int main(void) {
    30. schreiben();
    31. lesen();
    32. system("PAUSE");
    33. return 0;
    34. }
    Alles anzeigen

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von Helvete ()

  • Wenn ihr aus der Datei lesen wollt, könnt ihr in string2 nur ein char unterbringen ?(

    fread liest zwar - aber warum sollte etwas auf dem Bildschirm zu erkennen sein? -> Ausgabe ergänzen!

    Habt es ja geändert ;)

    Hier noch ein Link:
    cplusplus.com/reference/clibrary/cstdio/fread/
    Da steht zwar C++ oben - in vielen, aber nicht in allen Fällen, kann man auch Lehren für C daraus ableiten.

    Nachtrag:
    Hier noch ein Beispiel mit weniger Sicherheitsabfragen:
    math.tau.ac.il/~danha/courses/soft1-fall98-9/c11-fread.c

    MfG bcc-fan

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von bcc-fan ()

  • So nun habe ich das ganze mal so geändert das ich mehrere Zeilen eingeben kann jetzt möchte ich das ich meine Eingabe mit einem Punkt beenden kann sieht so aus:

    Quellcode

    1. int schreiben(){
    2. int grenze=4000;
    3. char ende='.';
    4. int i;
    5. /*Zeiger FILE enthält informationen zur Datei abwicklung und wird in stdio.h definiert*/
    6. FILE * Mem;
    7. /*Zu schreibender Text*/
    8. char schreiben[grenze];
    9. printf("Bitte den Text eingeben \n");
    10. for(i=0;i<sizeof(schreiben);i++){
    11. fgets(schreiben, grenze, stdin);
    12. if(schreiben[i]==ende){
    13. printf("ich bins");
    14. }
    15. }
    Alles anzeigen




    nun passt da leider etwas mit der If abfrage nicht er läuft einfach nicht rein nur zur info printf(" ich bins"); soll einfach nur zum test sein ob die abfrage geht eigentlich müsste dort ein break; rein damit die schleife abgebrochen wird also eingabe beendet wird oder ich schließe die datei wieder müsste sie dann aber wieder öffnen ist irgenwie blöd oder nicht ? aber dazu müsste ich erstmal in die if laufen was ich aber nicht tue stehe gard voll auf dem schlauch habe keine idee wie ich das machen könnte
    bitte nochmals um eine kleine hilfe !

    danke
  • So also hab das ganze jetzt nochmal bischen geändert jetzt funzts auch aber es sind nen paar fragen aufgekommen also folgendes:


    Quellcode

    1. if(Mem==NULL){
    2. printf("error");
    3. }else{
    4. while(1){
    5. fgets(schreiben, grenze, stdin);
    6. if (schreiben[0]=='.')break;
    7. time_t t;
    8. time(&t);
    9. fprintf(Mem, ctime(&t));
    10. fprintf(Mem,"%s\n", schreiben);
    11. fflush(stdin);
    12. }
    Alles anzeigen



    hab das ganze jetzt mit einer endlosschleife gemacht die überprüft ob denn der letzte buchstabe ein ' .' ist und siehe da er bricht ab aber wieso tut er das nicht bei meiner ersten variante


    Quellcode

    1. for(i=0;i<sizeof(schreiben);i++){
    2. fgets(schreiben, grenze, stdin);
    3. if(schreiben[i]==ende){
    4. printf("ich bins");
    5. }
    6. }
    Alles anzeigen


    hier passiert gar nichts läuft nicht mal in die if abfrage rein aber warum ist doch das gleiche in grün oder nicht ????

    die zweite frage ist :




    Quellcode

    1. while(1){
    2. fgets(schreiben, grenze, stdin);
    3. if (schreiben[0]=='.')break;
    4. time_t t;
    5. time(&t);
    6. fprintf(Mem, ctime(&t));
    7. fwrite(schreiben,sizeof(schreiben),1,Mem);
    8. fflush(stdin);
    9. }
    Alles anzeigen


    wenn ich fprintf durch fwrite ersetze dann haut er mir nur noch komisches zeugs raus:

    Bitte den Text eingeben
    Hallo C freunde
    .
    Sun Nov 7 18:54:20 2010
    Hallo C freunde
    ��-l@g@{�� Press [Enter] to close the terminal ...


    warum ist das so ??? fwrite ist doch genau das gleiche wie fprintf oder nicht????

    Mit freundlichen grüßen