Jak usunąć z pliku kilka ostatnich bajtów?

0

No właśnie?
Załóżmy, że chce usunąć 5 ostatnich bajtów z pliku.

var
  fs: TFileStream;
begin
  fs:=TFileStream.Create('C:\plik.roz', fmOpenReadWrite);
  fs.Seek(5, soFromEnd);
  //i co dalej???

  fs.Free;
end;

</delphi>
0

Ja bym to inaczej zrobił - kopiujesz wszystkie bajty do nowego strumienia od początku bez 5 ostatnich a nastepnie zapisujesz i usuwasz plik pierwotny... :>

0
procedure Odetnij(const NazwaPliku:string; Ile:integer);
var s,s2:TFileStream;
begin
  s:=TFileStream.Create(NazwaPliku, fmOpenRead);
  if Ile >= s.Size then
     MessageBox(0, 'Zastanów się ile tniesz!', 'Błąd!', MB_OK or MB_ICONERROR );
  s2:=TFileStream.Create(NazwaPliku+'.tmp', fmCreate	);
  s2.CopyFrom(s,s.Size-Ile);
  s.Free;
  s2.Free;
  DeleteFile( NazwaPliku );
  RenameFile(  NazwaPliku+'.tmp', NazwaPliku );
end;

Nudzi mi się :)

0
procedure TForm1.Button1Click(Sender: TObject);
var
  plik1, plik2: TFileStream;
begin
  plik1:= TFileStream.Create('a.txt', fmOpenRead);
  plik2:= TFileStream.Create('a.tmp', fmCreate);
  plik2.CopyFrom(plik1, plik1.Size-5);
  plik1.Free;
  plik2.Free;
  DeleteFile('a.txt');
  RenameFile('a.tmp', 'a.txt');
end;

//Ech Qyon wyprzedziłes mnie :)

0

_Truncate()

bo po co kopiować kupę danych, skoro można po prostu obciąć kilka bajtów z końca pliku?

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