Dělení binárního souboru - skriptem nebo programem

Dusan Zatkovsky dusan na printsoft.cz
Středa Srpen 6 10:26:28 CEST 2003


Dne út 5. srpen 2003 14:57 jste napsal(a):
> Dobrý den,
>
> mám image soubor, potřebuji ho rozdělit na X částí. Vím, že každá část má
> začínat na "Øÿá" (ASCII, hexd. to je "d8 ff e1") a končit před začátkem
> další.
>
>
> Uvítám jakoukoli použitelnou radu, jak zpracovat skript, nebo program, nebo
> použít nějakých hotových utilit.
>
> Zdraví, Oak.
>


Skuste toto, netestoval som to ale.
Po kompilacii ma 3 parametre:
meno_src_suboru meno_dst_suboru pripona_dst_suboru

#include <cstdio>
#include <string>


const unsigned char DELIM[] = {0xd8, 0xff, 0xe1};
const int DELIM_LEN = 3;


int main(int argc, char** argv)
{

  if(argc != 4) return -1;

  string src = argv[1];
  string dst = argv[2];
  string dstex = argv[3];

  FILE* fs = fopen(src.c_str(), "rb");
  FILE* fd;

  if(fs == NULL) return -1;

  int step = 0;
  unsigned char * buff = new unsigned char[DELIM_LEN];
  while(1) {
    if(feof(fs)) {
      fclose(fs);
      fclose(fd);
      return 0;
    }

    char outname[256];
    snprintf(outname, 255, "%s%05d.%s", dst.c_str(), step++, dstex.c_str());

    fd = fopen(outname, "wb");
    if(fd == NULL) return -1;
    

    while(1) {
      bool brfg = false;
      int rd = fread(buff, 1, DELIM_LEN, fs);
      if(feof(fs)) {
        fclose(fs);
        fclose(fd);
        return 0;
      }
      if(rd != DELIM_LEN) {
        fwrite(buff, 1, rd, fd);
        fclose(fs);
        fclose(fd);
        return 0;        
      }

      bool status;
      for(int i = 0; i < DELIM_LEN; i++) {
        if(buff[i] != DELIM[i]) {
          status = false;
          break;
        }
        status = true;
      }

      if(!status) {
        fwrite(buff, 1, rd, fd);
      }

      if(status) {
        fclose(fd);
        brfg = true;
        fseek(fs, -DELIM_LEN, SEEK_CUR);
      }

      if(brfg) break;
    }
  }
} 









-- 

S pozdravom,
Dusan Zatkovsky


Další informace o konferenci Linux