Dateien binär einlesen und teilweise kopieren

Hi,

ich versuche ein Programm zu schreiben, dass mehrere beliebige Dateien aneinanderhängt bzw. aneinandergehängte Dateien wieder splittet, damit sie beispielsweise als Teile auf mehreren kleinen Datenträgern transportiert werden können.

Dazu nutze ich Streams um die Dateien binär einzulesen.
Mit Textdateien funktioniert das auch, nur sobald ich versuche z.B. eine Bilddatei zu teilen, gibt er nur die ersten vier Zeichen aus.

Woran könnte das liegen?

Ich wünsche noch ein schönes WE und danke für die Hilfe!

cu
Frederic


Hier ist mein bisheriger Quelltext:

_stdcall int extern „C“ _declspec(dllexport) unpack(char* chrSource, char* chrDest, int LBound, int FLen)
{
char buf[1];

char nachr[255];

ofstream dat_aus;
ifstream dat_ein;

//Opens the file binary
dat_aus.open(chrDest,fstream::out | fstream::binary);
dat_ein.open(chrSource,fstream::in | fstream::binary);

//die ersten LBound zeichen wegwerfen
for(int i = 1;i

Hallo,

ich versuche ein Programm zu schreiben, dass mehrere beliebige
Dateien aneinanderhängt bzw. aneinandergehängte Dateien wieder
splittet, damit sie beispielsweise als Teile auf mehreren
kleinen Datenträgern transportiert werden können.

Dafür gibt es die (auch unter Win32 verfügbaren)
Unix-Programme „split“ und „cat“. Auf meinem
Windows-Rechner zerlegt der Befehl:

 c:\> split -a 4 -b 8192 gross.tif splitgross

die 100kb große Datei gross.tif in 13 Dateien
mit dem Präfix „splitgross“ und der Endung aaaa,aaab,aaac
usw. (wegen -a 4).
Der Befehl:

 c:\> cat splitgross\* \> gross.tif

stellt die Originaldatei aus den Teilen wieder her.

Die Programme sind z.B.: hier:
=> ftp://garbo.uwasa.fi/win95/unix/UnxUpdates.zip

Dazu nutze ich Streams um die Dateien binär einzulesen.
Mit Textdateien funktioniert das auch, nur sobald ich versuche
z.B. eine Bilddatei zu teilen, gibt er nur die ersten vier
Zeichen aus.
Woran könnte das liegen?

Da sind einige Ungereimtheiten drin.
Ein char[1] sieht immer sehr verdächtig aus:

dat_ein.read((char*)buf, strlen(buf));

Wenn in der Binärdatei eine 0 ist, liefert strlen
eine 0 …

//zeichen einzeln rüberkopieren
for(int j = 0;j #include

#include
#include

int mysplit(const std::string& src, const std::string& dst, size_t LBound, size_t FLen)
{
// opens the files in binary mode
std::ifstream f_ein(src.c_str(), std::ios::binary);
std::ofstream f_aus(dst.c_str(), std::ios::binary);

// die ersten LBound zeichen wegwerfen
f_ein.seekg(LBound, std::ios::beg);

// Zeichen einzeln rüberkopieren
std::istreambuf_iterator i_ein(f_ein), end;
std::ostreambuf_iterator i_aus(f_aus);

while(i_ein != end && FLen–) *i_aus++ = *i_ein++;

return FLen;
}Grüße

CMБ