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>
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>
Ja bym to inaczej zrobił - kopiujesz wszystkie bajty do nowego strumienia od początku bez 5 ostatnich a nastepnie zapisujesz i usuwasz plik pierwotny... :>
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ę :)
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 :)
_Truncate()
bo po co kopiować kupę danych, skoro można po prostu obciąć kilka bajtów z końca pliku?