Dateien öffnen und schreiben



  • Beispiel:

    char eingabe;
    int versuch = 0;
    
    printf("Eingabe : ");
    scanf("%c" , &eingabe);
    getchar();
    
    switch (eingabe)
     {
      case 'a':
      clrscr();
      break;
    
      default:
      while (eingabe != 'a')
      {
       printf("Eingabe : ");
       scanf("%c" , &eingabe);
       getchar();
       versuch++;
      }
    
    }
    

    Nun möchte ich den Wert von der Variablen versuch eine eine extra angelegte Datei schreiben. Wie kann ich das nun machen ? Muss ich dazu noch anderer header Dateien eineinbinden oder reicht die STDIO ? Und wo muss der Programmtext dafür stehen ? Direkt dadrunter ?

    Vielen Dank schon mal an die, welche sich damit beschäftigen werden.

    Bis denn !

    [ 03.07.2001: Beitrag editiert von: class CMarcus ]

    [ 09.07.2001: Beitrag editiert von: class CMarcus ]



  • stdio.h reicht

    FILE* datei1;
    datei=fopen("datei.txt","r+");
    /* alternativ zu r+
    r - nur zum lesen
    w - nur zum schreiben
    r+, w+ - zum schreiben UND lesen (ueberschreiben der datei)
    a - schreiben, aber anhaengen an die datei
    a+ - schreiben und lesen, an die datei wird angehaengt*/
    
    if(datei==NULL)
    //fehler beim oeffnen
    return -1;
    
    fseek(datei,0,SEEK_END);
    /*fseek veraendert die position in der datei...
    SEEK_END heisst ans ende der datei, SEEK_SET ist der anfang und SEEK_CUR ist die aktuelle position...
    0 ist der wert um den die position geaendert wird (in unserem fall 0, da wir ja das datei einde wollen)
    */
    
    fprintf(datei,"Hallo Datei");
    //wie printf() zu handhaben!
    
    //alternativ zu fprintf gibt es noch fputs()
    
    fscanf(datei,"%s",&string);
    //wie scanf()
    
    //alternativ dazu gibt es gets
    
    fclose(datei);
    //wichtig: FILE* muss wieder geschlossen werden
    

    halbwegs verstaendlich ausgedrueckt ??

    [ 09.07.2001: Beitrag editiert von: class CMarcus ]



  • Weitere interessante Sachen wären dann:

    fgets() und fputs()
    fgets() liest entweder bis zum \n oder bis zur maximalen Anzahl Zeichen... das '\n' wird mitgelesen...

    fputs ist analog dafür da in die Datei zu schreiben...

    Eine Datei bis zum Ende auslesen geht entweder in dem man mit fgetc arbeitet und EOF abfängt

    while( (c=fgetc(datei)) != EOF)
    

    (allerdings muss c dann vom typ int sein, denn EOF ist kein char-wert)

    oder mittels der Funktion feof

    while(!feof(datei))
    

    mittels rename() kann man eine Datei umbennen und mittels remove() löschen...

    Nachtrag zu fopen: man kann auch die Oeffnungsart angeben:

    fopen("deine.datei","wb")
    

    b steht für Binary und muss explizit angegeben werden...
    wenn man nichts schreibt, also zB nur "w", dann bedeutet dies 'Textmodus'
    in binären Dateien werden '\n' nicht in einen Zeilenumbruch gewandelt sondern stehen als das drinnen, als das das aktuelle OS es repraesentiert.
    unter windows zB \r\n
    unter MAC zB \r
    nur unter Unix bleibts gleich, da ein Zeilenumbruch durch \n gekennzeichnet ist.

    Binäre Dateien braucht man vor allem in Zusammenhang mit structs:

    Mittels fread und fwrite ist es möglich structs zu speichern und laden... z.B.

    s S;
    if(fwrite(&S,sizeof(s),3,dat)==3)
    

    fwrite liefert Anzahl der fehlerfrei geschriebenen structs

    fseek(dat,sizeof(s)*3,SEEK_SET);
    if(fread(&S,sizeof(s),1,dat)==1)
    

    Mittels fseek springe ich vor die 4te struct und lese dann eine struct in S ein... fread liefert die Anzahl der fehlerfrei gelesen structs zurück.


Anmelden zum Antworten