Ich habe versucht, fopen in C zu verwenden, der zweite Parameter ist der offene Modus. Die beiden Modi “r” und “rb” verwirren mich sehr. Es scheint, dass sie gleich sind. Aber manchmal ist es besser, “rb” zu verwenden. Also, warum existiert “r”? Erklären Sie es mir ausführlich oder mit Beispielen. Danke.
was ist der unterschied zwischen r und rb in fopen
Steven Wang
Du solltest benutzen "r"
zum Öffnen von Textdateien. Unterschiedliche Betriebssysteme haben leicht unterschiedliche Möglichkeiten, Text zu speichern, und dies führt die korrekten Übersetzungen durch, sodass Sie nichts über die Eigenheiten des lokalen Betriebssystems wissen müssen. Sie werden zum Beispiel wissen, dass Zeilenumbrüche immer als einfach erscheinen "\n"
unabhängig davon, wo der Code ausgeführt wird.
Du solltest benutzen "rb"
wenn Sie Nicht-Textdateien öffnen, da in diesem Fall die Übersetzungen nicht angemessen sind.
-
Dies ist plattformabhängig. Unter Unix macht der Textmodus nichts Besonderes, also funktioniert er immer noch nicht
\r\n
wie\n
.– C. K. Young
1. Februar 2010 um 5:51 Uhr
-
Die Idee ist das
"r"
wird eine “Textdatei” auf demselben System korrekt öffnen. Wenn Sie eine Windows-Textdatei unter Linux mit öffnen"r"
müssen Sie sich natürlich selbst um verschiedene Zeilenende-Konventionen kümmern.– Alok Singhal
1. Februar 2010 um 6:00 Uhr
-
Wenn Sie eine in Windows geschriebene Datei auf einem Linux-System öffnen, sehen Sie das Verhalten. Sie müssen die Datei in eine Unix-Textdatei konvertieren. Das geht ganz einfach mit einem Programm namens
dos2unix
oder in vim, geben Sie nach dem Öffnen einer Datei Folgendes ein::se ff=unix
drücken Sie die Eingabetaste und speichern Sie dann.– Alok Singhal
1. Februar 2010 um 6:32 Uhr
-
Ja. Wie Alok sagt,
"r"
dient zum Öffnen von Textdateien, wie sie von den lokalen Gepflogenheiten definiert sind – dh zum Öffnen von Linux-Textdateien unter Linux, Windows-Textdateien unter Windows und OS/390-Textdateien unter OS/390. Wenn Sie Textdateien zwischen PCs verschieben, liegt es an Ihnen, sie in das native Format zu übersetzen.– Café
1. Februar 2010 um 6:32 Uhr
-
@caf, alle meine Dateien und Operationen sind alle fenstertypisiert … Sie können my ausprobieren
plus
Beispiel…..– StevenWang
1. Februar 2010 um 6:40 Uhr
Alok Singhal
Unter Linux und Unix im Allgemeinen "r"
und "rb"
sind gleich. Genauer gesagt, a FILE
Zeiger erhalten durch fopen()
Das Speichern einer Datei im Textmodus und im Binärmodus verhält sich unter Unixen gleich. Unter Windows und im Allgemeinen auf Systemen, die mehr als ein Zeichen verwenden, um “Zeilenumbrüche” verhält sich eine im Textmodus geöffnete Datei so, als ob all diese Zeichen nur ein Zeichen wären, '\n'
.
Wenn Sie Textdateien auf einem beliebigen System portabel lesen/schreiben möchten, verwenden Sie "r"
und "w"
in fopen()
. Dadurch wird sichergestellt, dass die Dateien ordnungsgemäß geschrieben und gelesen werden. Wenn Sie eine Binärdatei öffnen, verwenden Sie "rb"
und "wb"
damit eine unglückliche Newline-Übersetzung Ihre Daten nicht durcheinander bringt.
Beachten Sie, dass eine Folge davon, dass das zugrunde liegende System die Zeilenumbruchübersetzung für Sie durchführt, darin besteht, dass Sie die Anzahl der Bytes, die Sie mit fseek(file, 0, SEEK_END) aus einer Datei lesen können, nicht bestimmen können.
Schließlich sehen Was ist der Unterschied zwischen Text- und Binär-E/A? an comp.lang.c FAQs.
-
Ich denke, dass es bei dieser Denkweise Vorbehalte geben kann. Das System, auf dem das Programm ausgeführt wird, kann Linux sein, aber die geöffnete Datei wurde möglicherweise an anderer Stelle erstellt. Stellen Sie sich vor, Sie schreiben einen Programmcode für einen Server. Auf dem Server selbst kann Linux ausgeführt werden, aber Endbenutzer, die die Dateien auf den Server hochladen, verwenden möglicherweise Windows. In diesem Fall können die Dateien enthalten
\r\n
oder\r
Anstatt von\n
. Am Ende macht der Inhalt der Datei selbst den Unterschied, nicht gerade das System.– Deutsch
23. September 2021 um 13:25 Uhr
Verwenden Sie “rb”, um eine Binärdatei zu öffnen. Dann werden die Bytes der Datei beim Lesen nicht codiert
- „r“ ist dasselbe wie „rt“ für Übersetzter Modus
- “rb” ist der nicht übersetzte Modus.
Dies macht zumindest unter Windows einen Unterschied. Siehe diesen Link für Details.
Auf den meisten POSIX-Systemen wird es ignoriert. Aber überprüfen Sie Ihr System, um sicherzugehen.
XNU
Die Moduszeichenfolge kann auch den Buchstaben ‘b’ entweder als letztes Zeichen oder als Zeichen zwischen den Zeichen in irgendeiner der oben beschriebenen Zwei-Zeichen-Zeichenfolgen enthalten. Dies dient ausschließlich der Kompatibilität mit ISO/IEC 9899:1990 („ISO C90“) und hat keine Auswirkung; das ‘b’ wird ignoriert.
Linux
Die Moduszeichenfolge kann auch den Buchstaben ‘b’ enthalten, entweder als letztes Zeichen oder als Zeichen zwischen den Zeichen in einer beliebigen der oben beschriebenen Zwei-Zeichen-Zeichenfolgen. Dies dient ausschließlich der Kompatibilität mit C89 und hat keine Auswirkung; das ‘b’ wird auf allen POSIX-konformen Systemen, einschließlich Linux, ignoriert. (Andere Systeme behandeln Textdateien und Binärdateien möglicherweise anders, und das Hinzufügen des ‘b’ kann eine gute Idee sein, wenn Sie I/O in eine Binärdatei ausführen und erwarten, dass Ihr Programm in Nicht-UNIX-Umgebungen portiert wird.)
Binär lesen und lesen c-faq.com/stdio/textvsbinary.html
– Terrasse
21. September 2011 um 16:54 Uhr