Binary File spliten
-
Hallo.
Ich bin im Begriff ein Programm zu schreiben in dem es unbedingt notwendig ist Dateien zu spliten.
Ich benutze GnuCompiler(gcc) unter Windows und unter Linux.
Unter Linux läuft das programm, aber unter Windows gibt es 2 Probleme:- es werden meistens zwischen 100 und 1000 Zeichen gelesen und dann ist finito
- wenn ich den buffer auf 3MB (SIZE = 3000000) setzte stürzt das Programm ab. Im gegensatz zu einem Buffer von 1000 Zeichen wo dann aber trotzdem eben nur der Anfang der Datei gelesen wird.
Mein Code sieht vorläufig so aus:
#include <string.h> #include <stdio.h> #include <io.h> #include <sys/stat.h> #include <fcntl.h> #include <stdio.h> #include <windows.h> #define SIZE 3000000 int read_write(); int main(int argc, char *argv[]) { printf("%d ZEICHEN geschrieben!\n",read_write()); system("PAUSE"); } int read_write() { int f1,f2; char buf[SIZE]; char filename[MAX_PATH]; int sum,len,i,j; f1=open("a.out",O_RDONLY); //oeffne Quellfile (f1) i=0; sum=0; do{ strcpy(filename,"testfile.txt"); // filename +a (beim 2ten mal b, usw.) for(j=0;filename[j]!='\0';j++); //... filename[j]='a'+i; //... filename[++j]='\0'; //... f2=creat(filename,S_IWRITE); // erstelle neus File (f2) len=read(f1,buf,SIZE); //lese SIZE = 3 000 000 Zeichen, write(f2,buf,len); //schreibe sie sum+=len; i++; }while(len==SIZE); close(f1); close(f2); return sum; //giebt summe der insgesammt //geschrieben zeichen zurueck }Ich habe keine Ahnung woran das liegt.
Bitte um Hilfe.
Danke
-
Der Stack hat eine voreingestellte begrenzte Größe. Default=1MB.
Es ist nicht sonderlich gescheit
1. den Puffer in der Größe auf dem Stack anzulegen, verwende malloc/new
2. Alles in einem Rutsch zu lesen. Bau Dir einfach eine Schleife die kleinere Segmente liest.
3. nicht _O_BINARY zu setzen, wenn es sich um binäre Daten handelt.