Hypercell ein ] Hypercell aus ] Zeige Navigation ] Verstecke Navigation ]
c++.de  
   

Die mobilen Seiten von c++.de:
http://m.c-plusplus.de
Infos hier [BETA]

  
c++.de :: C++ (auch C++0x und C++11) ::  fopen, binary file?     Zeige alle Beiträge auf einer Seite Auf Beitrag antworten
Autor Nachricht
banshee
Mitglied

Benutzerprofil
Anmeldungsdatum: 11.10.2006
Beiträge: 79
Beitrag banshee Mitglied 17:05:34 20.08.2008   Titel:   fopen, binary file?            Zitieren

hallo,

was bedeutet das denn eigentlich, wenn ich ein file zb. mit dem mode "rb" öffne? Wo ist der Unterschied zum normalen "r"?
drakon
Mitglied

Benutzerprofil
Anmeldungsdatum: 28.01.2008
Beiträge: 6862
Beitrag drakon Mitglied 17:20:51 20.08.2008   Titel:              Zitieren

read binary.

http://www.cppreference.com/stdio/fopen.html
banshee
Mitglied

Benutzerprofil
Anmeldungsdatum: 11.10.2006
Beiträge: 79
Beitrag banshee Mitglied 19:38:47 20.08.2008   Titel:              Zitieren

jaja, das ist mir schon klar, aber was heißt das im Endeffekt? Wenn ich aus einer normalen Textdatei ein Zeichen einlese, dann macht der PC das ja wohl auch über Binärcode, also was läuft da anders, wenn ich sie als binary file öffne?
drakon
Mitglied

Benutzerprofil
Anmeldungsdatum: 28.01.2008
Beiträge: 6862
Beitrag drakon Mitglied 19:45:56 20.08.2008   Titel:              Zitieren

banshee schrieb:
jaja, das ist mir schon klar, aber was heißt das im Endeffekt? Wenn ich aus einer normalen Textdatei ein Zeichen einlese, dann macht der PC das ja wohl auch über Binärcode, also was läuft da anders, wenn ich sie als binary file öffne?


Schreib mal was in ein File, wenn du es binär geöffnet hast und einmal normal.
lagalopex
Mitglied

Benutzerprofil
Anmeldungsdatum: 21.01.2008
Beiträge: 373
Beitrag lagalopex Mitglied 19:50:43 20.08.2008   Titel:              Zitieren

Beim Binären wird 1-zu-1 gelesen oder geschrieben. Bei Textdateien können die Daten vom Betriebssystem verändert werden. Zb bei Windows die Konvertierung von "\n" <-> "\r\n".
banshee
Mitglied

Benutzerprofil
Anmeldungsdatum: 11.10.2006
Beiträge: 79
Beitrag banshee Mitglied 23:53:48 20.08.2008   Titel:              Zitieren

Was ist denn jetzt kaputt? Ich hab mir also mal ein kleines Testprogramm geschrieben, aber schon bei diesem code ist f immer NULL. Woran kann das denn liegen?

C++:
1
2
3
4
5
6
7
8
9
10
#include <stdio.h>
 
int main()
{
    FILE *f;
   
    f = fopen("r.txt", "r");
 
    return 0;
}
Xantus
Mitglied

Benutzerprofil
Anmeldungsdatum: 03.03.2008
Beiträge: 440
Beitrag Xantus Mitglied 00:09:49 21.08.2008   Titel:              Zitieren

Das kann viele Gründe haben - Datei ist nicht vorhanden, gelockt, ...

_________________
formerly unreg: hey | irc-chan: LizardKing
~ lernt suchen. sucht. ihr findet nichts? sucht auf english. euer problem wird nicht behandelt? lernt lesen. ~
banshee
Mitglied

Benutzerprofil
Anmeldungsdatum: 11.10.2006
Beiträge: 79
Beitrag banshee Mitglied 12:17:41 21.08.2008   Titel:              Zitieren

hm, ich dachte fopen erstellt dann eine leere Datei, wenn sie nicht vorhanden ist...
MFK
Mitglied

Benutzerprofil
Anmeldungsdatum: 02.11.2002
Beiträge: 5765
Beitrag MFK Mitglied 12:24:50 21.08.2008   Titel:              Zitieren

Nur wenn du die Datei zum Schreiben öffnest (w oder a).

_________________
"Funktioniert nicht" ist keine ausreichende Fehlerbeschreibung.
banshee
Mitglied

Benutzerprofil
Anmeldungsdatum: 11.10.2006
Beiträge: 79
Beitrag banshee Mitglied 15:53:17 21.08.2008   Titel:              Zitieren

ja das ist mir auch gerade aufgefallen. Erst denken, dann posten :)
banshee
Mitglied

Benutzerprofil
Anmeldungsdatum: 11.10.2006
Beiträge: 79
Beitrag banshee Mitglied 00:18:49 23.08.2008   Titel:              Zitieren

so ich hab mir jetzt endlich mal ein kleines Testprogramm dazu geschrieben.
Es schreibt einen Testsatz in zwei Dateien jeweils einmal mit dem normalen und einmal im binary mode geöffnet.
Dann lese ich das ganze auch wieder normal und binär aus und lasse mir die Zeichen als integers anzeigen.

Und für den Satz: "Dies ist ein Test für eine Datei im r-Modus." sind die Zeichen in beiden Dateien exakt gleich (auch das linefeed als ASCII 10)

Das was lagalopex geschrieben hat, macht zwar Sinn, aber wenn hier nur von "kann" die Rede ist, dann verstehe ich nicht, wieso ich in so vielen codes mal den einen und mal den anderen modus sehe. Irgendeinen Grund muss das doch haben.
Nexus
Mitglied

Benutzerprofil
Anmeldungsdatum: 16.05.2006
Beiträge: 10960
Beitrag Nexus Mitglied 17:04:33 23.08.2008   Titel:              Zitieren

Mit Hilfe des binären Schreibmodus kann man Speicherbereiche bitweise in eine Datei schreiben oder von ihr lesen. Das heisst, wenn man z.B. ein Array oder ein POD im Arbeitsspeicher hat, kann man das 1:1 in die Datei schreiben. Beim Lesen kann man dann den Speicherbereich wieder durch den Eintrag in der Binärdatei ersetzen. Aber das ist nicht immer ganz zuverlässig, z.B. für Klassen mit Zeigern etc. kann es nicht funktionieren. Oder auch wenn man nur wenig am Datentyp ändert, sind die Informationen in der Datei nutzlos.
banshee
Mitglied

Benutzerprofil
Anmeldungsdatum: 11.10.2006
Beiträge: 79
Beitrag banshee Mitglied 18:44:37 23.08.2008   Titel:              Zitieren

Ahso, d.h. mit dem normalen modus würde ich schonmal Probleme kriegen, wenn die Anzahl der bits nicht durch 8 teilbar ist?!

Und was ist eigentlich ein POD? :)
drakon
Mitglied

Benutzerprofil
Anmeldungsdatum: 28.01.2008
Beiträge: 6862
Beitrag drakon Mitglied 19:12:25 23.08.2008   Titel:              Zitieren

banshee schrieb:

Und was ist eigentlich ein POD? :)


Plain old data:
http://www.c-plusplus.de/ ....... -194356-and-highlight-is-*pod*.html
Nexus
Mitglied

Benutzerprofil
Anmeldungsdatum: 16.05.2006
Beiträge: 10960
Beitrag Nexus Mitglied 19:18:02 23.08.2008   Titel:              Zitieren

banshee schrieb:
Ahso, d.h. mit dem normalen modus würde ich schonmal Probleme kriegen, wenn die Anzahl der bits nicht durch 8 teilbar ist?!
Nicht zwingend, es kommt halt drauf an, wie du den Speicherbereich interpretierst (wenn nicht direkt Bit für Bit). Wobei ich mich frage, wo die Anzahl Bits nicht durch 8 teilbar ist... Du arbeitest ja nicht mit Bitfeldern, oder?
c++.de :: C++ (auch C++0x und C++11) ::  fopen, binary file?   Auf Beitrag antworten

Zeige alle Beiträge auf einer Seite




Nächstes Thema anzeigen
Vorheriges Thema anzeigen
Sie können Beiträge in dieses Forum schreiben.
Sie können auf Beiträge in diesem Forum antworten.
Sie können Ihre Beiträge in diesem Forum nicht bearbeiten.
Sie können Ihre Beiträge in diesem Forum nicht löschen.
Sie können an Umfragen in diesem Forum nicht mitmachen.

Powered by phpBB © 2001, 2002 phpBB Group :: FI Theme

c++.de ist Teilnehmer des Partnerprogramms von Amazon Europe S.à.r.l. und Partner des Werbeprogramms, das zur Bereitstellung eines Mediums für Websites konzipiert wurde, mittels dessen durch die Platzierung von Werbeanzeigen und Links zu amazon.de Werbekostenerstattung verdient werden kann.

Die Vervielfältigung der auf den Seiten www.c-plusplus.de, www.c-plusplus.info und www.c-plusplus.net enthaltenen Informationen ohne eine schriftliche Genehmigung des Seitenbetreibers ist untersagt (vgl. §4 Urheberrechtsgesetz). Die Nutzung und Änderung der vorgestellten Strukturen und Verfahren in privaten und kommerziellen Softwareanwendungen ist ausdrücklich erlaubt, soweit keine Rechte Dritter verletzt werden. Der Seitenbetreiber übernimmt keine Gewähr für die Funktion einzelner Beiträge oder Programmfragmente, insbesondere übernimmt er keine Haftung für eventuelle aus dem Gebrauch entstehenden Folgeschäden.