[C++] Usuwanie danych w pliku binarnym

0

Mam pewien problem i nie wiem jak go rozwiązać. Jak usunąć pewną ilość bajtów z pliku binarnego ?? Na googlach szukałem i nic nie znalazłem.

0

wydaje mi się, że jest tylko jeden sposób - przepisać plik bez tych bajtów :9

0
int usunzpliku(char* nazwapliku,long ilebajtowusunac, long odktorejpozycji){
  FILE* f=fopen(nazwapliku,"r+b");
  int ret=0;
  if(!f)return 0;  // nie ma pliku, lub jest readonly
  long l=filelength(fileno(f));
  if(odktorejpozycji>l)goto quit;
  if(odktorejpozycji+ilebajtowusunac>l)ilebajtowusunac=l-odktorejpozycji;
  char buf[1024];
  long p1=odktorejpozycji;
  long p2=ilebajtowusunac+odktorejpozycji;
  long d=l-p2;
  while(d){  // albo while(p2<l)
    int i=1024;
    if(i>d)i=d;
    d-=i;
    if(fseek(f,p2,SEEK_SET))goto quit;  // if i/o error
    if(fread(buf,i,1,f)^1)goto quit;
    if(fseek(f,p1,SEEK_SET))goto quit;
    if(fwrite(buf,i,1,f)^1)goto quit;
    p1+=i;
    p2+=i;
  }
  if(!chsize(fileno(f),l-ilebajtowusunac))ret++;
  quit:
  fclose(f);
  return ret;
}

Zwraca 1 gdy ok i 0 gdy cos nie wyszlo. Jesli podasz wiecej bajtow do skasowania niz jest od wskazanej pozycji do konca, to plik zostanie po prostu uciety.

// nie sprawdzalem, czy sie skompiluje, ale wyglada dobrze :)

// Milka nie tyle przepisac cały plik ile w pliku przepisać dane, a potem uciac plik

0

przecież nie napisałem, żeby przepisać cały plik ! czytaj dokładnie

0

Thx za pomoc. A tak na marginesie to ten kod chyba jest w C, a nie w C++. ;) Spróbuje go trochę przerobić, jeśli dowiem się o co w nim chodzi. :P

1 użytkowników online, w tym zalogowanych: 0, gości: 1