Datei binär auslesen und speichern

NRFi

Erfahrenes Mitglied
Hallo auch,
wie krieg ichs in C++ hin, eine Datei zu öffnen, binär zu lesen und als byte()-array wieder binär zu speichern, so dass sie nach dem speichern(zb als neue datei(jpg)) wieder anzugucken ist?

hat jemand dazu ein beispiel? :)

wäre nett.

gibt es da auch sowas schnelles wie buffered-stream oder irgendwie sowas? soll schnell sein und dem standard entsprechen.


danke für die hilfe:rolleyes:


gruß, NRFilein :-(
 
Das hängt davon ab was du machen willst.
Die guten alten C-Funktionen sind da ziemlich gut (sind auch schnell)

fopen()
fread()
fwrite()
fclose()
Erklärung siehe MSDN oder Man-Pages, je nach Betriebssystem.

Wenn du allerdings die Daten änderst und danach soll die Datei lesbar sein (JPG z.b.) musst du genau wissen was du tust. Wenn du allerdings Dateien kopieren willst, dann empfehle ich dir das ganze blockweise zu machen (z.B. immer 64K-Blöcke).

Gruß Homer
 
das mit den blöcken usw ist mir schon klar.
bis jetzt hab ich sowas aber noch nicht mit c++ gemacht und ich möchte für C++
gerne ein kleines beispiel, wie ich dateien vernünftig BINÄR einlesen kann..

danke
 
bis jetzt hab ich sowas aber noch nicht mit c++ gemacht und ich möchte für C++ gerne ein kleines beispiel, wie ich dateien vernünftig BINÄR einlesen kann..
fread() usw. funktionieren auch in C++ immer noch. Wenn du es allerdings richtig mit C++ machen willst, benutz ostream (schreiben) bzw. istream (lesen) - für den Dateizugriff entsprechend ofstream und ifstream. Die beiden Ein/Ausgabe-Streamklassen eignen sich mittels der Extraktions/Insertions-Operatoren << und >> zum formatierten (nicht-binären) Lesen und Schreiben. Wenn du es binär haben willst, kannt du die Methoden get()/read() bzw. put()/write() verwenden. Such mal in deiner Dokumentation nach basic_ostream bzw. basic_istream. Ein Beispiel ist wahrscheinlich dabei.
 
Zuletzt bearbeitet:
ok, in dem fall wird wahrscheinlich auch fopen und fread reichen.
habe jetzt

#include "stdafx.h"

#include <iostream.h>
#include <stdio.h>
#include <io.h>
#include <string.h>

void main()
{
FILE *oFile;
char *buffer;
unsigned long lFileLen = 0;

oFile = fopen("C:\\Adrian.jpg", "r+b");
lFileLen = filelength(oFile->_file);

buffer = new char[lFileLen];
//cout << lFileLen;
fread(buffer, 1, lFileLen, oFile);

cout << buffer;
fclose(oFile);
}

eine textdatei liest er schon aus, aber er kriegt zb. die jpg datei nicht ausgelesen. da gibt er nur ein paar byte aus. was ist da los
 
Zuletzt bearbeitet:
Ich verstehe deine Frage nicht.

Jedenfalls produzierst du ein Memory-Leck, weil buffer nicht freigegeben wird. Und basic_iostreams sollen man nicht direkt instantiieren. Du brauchst für den Dateizugriff entweder std::ifstream oder std::eek:fstream(#include <fstream>) - allerdings wird dein Stream test ja nicht benutzt.
 
jetzt versteh ich dich nicht...

bitte sag mir einfach nur, wie ich mit fopen und fread ein schönes array binär bekomme :)
 
Sieht eigentlich gut aus. Aber es macht doch keinen Sinn, Binärdaten als Chars ausgeben zu wollen. Wahrscheinlich ist folgende Ausgabe schonmal nicht richtig: cout << buffer;. wenn nämlich der erste "char" im Array 0 ist (was ja bei Binärdaten vollig normal wäre), bekommst du gar keine Ausgabe.
 
Hallo erst einmal zusammen.

Ich bin Fachinformatiker/Systemintegration in Ausbildung (2.Lehrjahr).

Bezüglich meiner Abschlussarbeit habe ich mir folgendes Thema ausgewählt, welches in diesen Kontext hier passen könnte...


Ich möchte Dateien (egal ob jpg,mpg, mp3, wav,usw.) blockweise binär auslesen, wobei jede "1" als "."(Punkt), jede "0" als Leerzeichen und das Blockende als "| " definiert ist.
Diese Darstellungsform der binär ausgelesenen Datei wird dann in Word oder ein anderes Programm implementiert und ausgedruckt.

Analog dazu möchte ich dann die ausgedruckte Form der Datei über einen Scanner einlesen, über die Software laufen lassen und wieder in den ursprünglichen Zustand konvertieren lassen.


Ich hoffe, ich habe mich nicht zu verwirrend ausgedrückt.

kann mir jemand einen Anhaltspunkt geben,da ch in Sachen Programmierung nicht der fitteste bin, jedoch motiviert, das durchzuziehen, sofern es realisierbar ist....
 
Zuletzt bearbeitet:
Es wäre vielleicht gut, dazu einen neuen Thread mit passendem Titel anzulegen, aber für's Erste:
Ich möchte Dateien (egal ob jpg,mpg, mp3, wav,usw.) blockweise binär auslesen, wobei jede "1" als "."(Punkt), jede "0" als Leerzeichen und das Blockende als "| " definiert ist.
Meinst du mit "0" und "1" in der Datei (nicht) gesetzte Bits? Was wäre dann das Blockende?

Es sollte möglich sein, so ein Projekt zu verwirklichen, aber nur unter der Voraussetzung, dass du prammiersprachlich einigermassen fit bist, da noch genug andere Probleme auf dich zukommen werden als die reine Kenntnis der Sprache. Beispielsweise die Einbindung in Word, es sei denn, du hast vor, eine Textdatei auszugeben, und diese mit Word zu öffnen. Oder die Verarbeitung der eingescannten Grafik, um das Bitmuster wiederherzustellen.
 

Neue Beiträge

Zurück