Dopisywanie do pliku

0

Witam,
Mam dość prostę pytanie lecz nie wiem jak to zrobić nie odczytując całego pliku. :d
Chodzi mi o dopisywaniu do pliku informacji linijka po linijce nie odczytując całego pliku.
Robię coś takiego: :>
Daje TFileStream
i otwieram plik do zapisu
i zapisuje WriteBuffor i ustawiam Position na Size tego pliku czyli na koniec.
Jednak to jest zły pomysł ;-(

0

A zwykłe dopisywanie do pliku jako zmiennej typu file przez Writeln nie może być ??

0

Ale dlaczego ten filestream to zły pomysł? Przecież filestream nie wczytuje calego piku do pamięci (tak mi się wydaje, ale inaczej to by była porażka :) ), tylko wskaźnik do niego, więc powinno to się wykonywać szybko nawet dla dużych plików.

0

Robię tak:

procedure Dopisz(Co: String);
var
 f: TFileStream;
begin
 f := TFileStream.Create('plik.txt', fmOpenWrite or fmShareDenyWrite);
 f.Seek(f.Size,soFormBeginning)
 f.Write(Co,Length(Co);
 //lub WriteBuffer(Co,Length(Co);
 f.Free;
end;

I wyskakują mi w pliku jakieś głupoty [???]
Coś nie tak zrobiłem sprawa wygląda za prosto :-/

0

Teraz wykombinowałem coś takiego:

procedure Dopisz(Co: string);
begin
 if not FileExists('plikczek.txt') then FileCreate('plikczek.txt');
 with TFileStream.Create('plikczek.txt', fmOpenWrite or fmShareExclusive) do
 begin
  try
   if Size > 0 then
    Seek(0, soFromEnd);
   Write(Pchar(Co)^, Length(Co));
  finally
   Free;
  end;
 end;
end;

I teraz jest mały problem, gdy pliku nie ma lub jest pusty nie można go otworzyć. :-8
Dodałem już na początku obsługę tworzenia pliku, ale i tak muszę jeszcze coś zrobić z tym plikiem bo wywala błąd.

0

fmCreate - Create a file with the given name. If a file with the given name exists, open the file in write mode.

I mozesz wywalić całego if-a.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.