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:

    1. es werden meistens zwischen 100 und 1000 Zeichen gelesen und dann ist finito
    2. 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


  • Mod

    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.


Anmelden zum Antworten