Unterschied zwischen r+ und w+ in fopen()

Lesezeit: 6 Minuten

Benutzeravatar von yaylitzis
jaylitzis

Im fopen("myfile", "r+") was ist der unterschied zw "r+" und "w+" offener Modus? Ich lese das:

"r" Öffnen Sie eine Textdatei zum Lesen.
"w" Öffnen Sie eine Textdatei zum Schreiben, kürzen Sie eine vorhandene Datei auf die Länge Null oder erstellen Sie die Datei, wenn sie nicht vorhanden ist.

"r+" Öffnen Sie eine Textdatei zum Aktualisieren (d. h. sowohl zum Lesen als auch zum Schreiben).
"w+" Öffnen Sie eine Textdatei zum Aktualisieren (Lesen und Schreiben), kürzen Sie die Datei zuerst auf die Länge Null, falls vorhanden, oder erstellen Sie die Datei, falls sie nicht vorhanden ist.

Ich meine, der Unterschied ist, dass wenn ich die Datei mit öffne "w+"wird die Datei zuerst gelöscht?

  • Die 2 Unterschiede sind genau dort: Abschneiden und Erstellen.

    Benutzer2404501

    14. Januar 2014 um 12:50 Uhr

  • … es wird zuerst “gelöscht” oder erstellt, wenn es nicht existiert (während r+ würde in diesem Fall Fehler geben.

    – Shin Takezou

    14. Januar 2014 um 12:50 Uhr

Benutzeravatar von Peter
Peter

Beide r+ und w+ kann eine Datei lesen und schreiben. Jedoch, r+ löscht den Inhalt der Datei nicht und erstellt keine neue Datei, wenn eine solche Datei nicht existiert, wohingegen w+ löscht den Inhalt der Datei und erstellt sie, falls sie nicht existiert.

  • Ich habe nach einer Möglichkeit gesucht, den Inhalt der Datei nicht zu löschen (wie r+), aber auch eine neue Datei zu erstellen, wenn sie nicht existiert (wie w+). Ich entdeckte open(x, 'a').close(); open(x, 'r+')

    – Cowlinator

    23. Mai 2018 um 2:04 Uhr

Benutzeravatar von hackks
hackt

Der Hauptunterschied ist w+ Kürzen Sie die Datei auf die Länge Null, falls vorhanden, oder erstellen Sie eine neue Datei, falls dies nicht der Fall ist. Während r+ löscht weder den Inhalt noch erstellt er eine neue Datei, wenn er nicht existiert.

Probieren Sie diese Codes aus und Sie werden verstehen:

#include <stdio.h>
int main()
{
   FILE *fp;

   fp = fopen("test.txt", "w+");
   fprintf(fp, "This is testing for fprintf...\n");
   fputs("This is testing for fputs...\n", fp);
   fclose(fp);
}  

und dann das

#include <stdio.h>
int main()
{
   FILE *fp;

   fp = fopen("test.txt", "w+");
   fclose(fp);
}   

Wenn Sie öffnen test.txtsehen Sie, dass alle vom ersten Programm geschriebenen Daten gelöscht wurden.
Wiederholen Sie dies für r+ und sehen Sie das Ergebnis.
Hier ist die Zusammenfassung verschiedener Dateimodi (1 => ture0 => false):

Geben Sie hier die Bildbeschreibung ein

  • Dies beantwortet die Frage nicht.

    – Cengiz Kandemir

    24. Mai 2019 um 9:20 Uhr

Dieses Diagramm ist beim nächsten Mal schneller zu lesen. Vielleicht findet das jemand anderes auch hilfreich. Dies ist klar der Unterschied zwischen erklärt. Geben Sie hier die Bildbeschreibung ein

  • Flussdiagramm ist das beste 😀

    – Srinath Ganesh

    19. Dezember 2020 um 16:19 Uhr

  • das ist Gold!!!

    – Gregor Watters Härtl

    3. Mai um 15:09 Uhr

  • Ich mag dieses Diagramm, aber das Szenario “Neue Datei erstellen” fehlt, das in der akzeptierten Antwort enthalten ist.

    – Markus S

    20. Juli um 8:14 Uhr

  • Ich habe gerade herausgefunden, dass “a” kein Suchen nach Schreiben erlaubt. Die Dokumentation für “a+” besagt, dass “die Ausgabe immer an das Ende der Datei angehängt wird”, und kann daher für “a” gelten.

    – Anonym

    9. August um 14:39 Uhr

r = read mode only
r+ = read/write mode
w = write mode only
w+ = read/write mode, if the file already exists override it (empty it)

Also ja, wenn die Datei bereits existiert, wird w+ die Datei löschen und Ihnen eine leere Datei geben.

Benutzeravatar von Sathvik
Sathvik

w+

#include <stdio.h>
int main()
{
   FILE *fp;
   fp = fopen("test.txt", "w+");  //write and read mode
   fprintf(fp, "This is testing for fprintf...\n"); 

   rewind(fp); //rewind () function moves file pointer position to the beginning of the file.
   char ch;
   while((ch=getc(fp))!=EOF)
   putchar(ch);

   fclose(fp);
}  

Ausgang

This is testing for fprintf...

test.txt

This is testing for fprintf...

w und r Formen w+

#include <stdio.h>
int main()
{
   FILE *fp;

   fp = fopen("test.txt", "w"); //only write mode
   fprintf(fp, "This is testing for fprintf...\n"); 
   fclose(fp);
   fp = fopen("test.txt", "r");
   char ch;
   while((ch=getc(fp))!=EOF)
   putchar(ch);
   fclose(fp);
}  

Ausgang

This is testing for fprintf...

test.txt

This is testing for fprintf...

r+

test.txt

This is testing for fprintf...
#include<stdio.h>
int main()
{
    FILE *fp;
    fp = fopen("test.txt", "r+");  //read and write mode
    char ch;
    while((ch=getc(fp))!=EOF)
    putchar(ch);
    rewind(fp); //rewind () function moves file pointer position to the beginning of the file.
    fprintf(fp, "This is testing for fprintf again...\n");
    fclose(fp);
    return 0;
}

Ausgang

This is testing for fprintf...

test.txt

This is testing for fprintf again...

r und w Formen r+

test.txt

This is testing for fprintf...
#include<stdio.h>
int main()
{
    FILE *fp;
    fp = fopen("test.txt", "r"); 
    char ch;
    while((ch=getc(fp))!=EOF)
    putchar(ch);
    fclose(fp);

    fp=fopen("test.txt","w");
    fprintf(fp, "This is testing for fprintf again...\n");
    fclose(fp);
    return 0;
}

Ausgang

This is testing for fprintf...

test.txt

This is testing for fprintf again...

ein+

test.txt

This is testing for fprintf...
#include<stdio.h>
int main()
{
    FILE *fp;
    fp = fopen("test.txt", "a+");  //append and read mode
    char ch;
    while((ch=getc(fp))!=EOF)
    putchar(ch);
    rewind(fp); //rewind () function moves file pointer position to the beginning of the file.
    fprintf(fp, "This is testing for fprintf again...\n");
    fclose(fp);
    return 0;
}

Ausgang

This is testing for fprintf...

test.txt

This is testing for fprintf...
This is testing for fprintf again...

a und r Formen ein+

test.txt

This is testing for fprintf...
#include<stdio.h>
int main()
{
    FILE *fp;
    fp = fopen("test.txt", "a");  //append and read mode
    char ch;
    while((ch=getc(fp))!=EOF)
    putchar(ch);
    fclose(fp);
    fp=fopen("test.txt","r");
    fprintf(fp, "This is testing for fprintf again...\n");
    fclose(fp);
    return 0;
}

Ausgang

This is testing for fprintf...

test.txt

This is testing for fprintf...
This is testing for fprintf again...

  • Beste Antwort meiner bescheidenen Meinung nach. Sollte die akzeptierte sein.

    – Sopalajo de Arrierez

    3. Januar 2020 um 22:39 Uhr

  • Was passiert mit der im r+-Modus geöffneten Textdatei, wenn die im obigen Beispiel gedruckte Zeichenfolge kürzer ist als die in der ursprünglichen test.text. zum Beispiel fprintf (fp, “Hallo”); wird es einfach Hello oder Hellois testet fprintf nochmal…

    – Janjan

    28. April 2020 um 20:03 Uhr

  • @Janjan Es druckt Hallo

    – Satvik

    29. April 2020 um 5:21 Uhr

Benutzeravatar von perreal
perreal

Es gibt 2 Unterschiede, im Gegensatz zu r+, w+ Wille:

  • Erstellen Sie die Datei, falls sie noch nicht vorhanden ist
  • zuerst abschneiden, dh seinen Inhalt löschen

  • Beste Antwort meiner bescheidenen Meinung nach. Sollte die akzeptierte sein.

    – Sopalajo de Arrierez

    3. Januar 2020 um 22:39 Uhr

  • Was passiert mit der im r+-Modus geöffneten Textdatei, wenn die im obigen Beispiel gedruckte Zeichenfolge kürzer ist als die in der ursprünglichen test.text. zum Beispiel fprintf (fp, “Hallo”); wird es einfach Hello oder Hellois testet fprintf nochmal…

    – Janjan

    28. April 2020 um 20:03 Uhr

  • @Janjan Es druckt Hallo

    – Satvik

    29. April 2020 um 5:21 Uhr

Benutzeravatar von Ashwani Bansal
Ashwani Bansal

r+ Die vorhandene Datei wird sowohl zum Lesen als auch zum Schreiben von Anfang an geöffnet. w+ Dasselbe wie w, außer sowohl zum Lesen als auch zum Schreiben.

1419190cookie-checkUnterschied zwischen r+ und w+ in fopen()

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy