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
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