TFileStream/pl

From Free Pascal wiki
Jump to navigationJump to search

Deutsch (de) English (en) français (fr) polski (pl)

TFileStream jest potomkiem klasy TStream, który pobiera/przechowuje swoje dane z/w pliku na dysku.

Strumień plikowy

Strumień plikowy (Filestream) to sposób na łatwe i szybkie przetwarzanie plików, jest idealny do przetwarzania plików o dowolnym rozmiarze.

TFileStream nie zapewnia buforowania, więc jeśli dostęp do części pliku jest powtarzany, należy go załadować do bufora. Ponadto nie powinien być odczytywany sekwencyjnie bajt po bajcie, ale zawsze w blokach, jeśli to możliwe. Aby uzyskać najwyższą prędkość odczytu przy dużych plikach, rozmiar bloku powinien być oparty na rozmiarze strony systemu operacyjnego.

Stałe dostępu do plików

Poniższe stałe określają sposób dostępu do pliku. Stałe zaczynające się od fmShare można zawsze określić, ale nie są obsługiwane przez wszystkie systemy operacyjne.

Stała Wartość Opis
fmCreate 65280 Tworzy nowy plik
fmOpenRead 0 Otwiera plik do odczytu
fmOpenWrite 1 Otwiera plik do zapisu
fmOpenReadWrite 2 Otwiera plik do odczytu i zapisu
fmShareDenyWrite 32 Zabrania zapisywania, jeśli plik jest już otwarty
fmShareCompat 0 Otwiera plik w trybie zgodności z udziałami DOS
fmShareExclusive 16 Zablokuj plik do wyłącznego użytku; inne procesy nie mogą uzyskać dostępu do pliku
fmShareDenyWrite 32 Zablokuj plik do zapisu; inne procesy mogą otwierać plik tylko do odczytu
fmShareDenyRead 48 Zablokuj plik do odczytu; inne procesy mogą jedynie zapisywać dane
fmShareDenyNone 64 Nie blokuj pliku; inne procesy mogą kontynuować odczytywanie i zapisywanie do pliku

Przykłady użycia

  • Wczytaj cały plik fName i zwróć jako ciąg string.
uses
  Classes, SysUtils;

function ReadFromFileStream(fName: string): string;
var
  stream: TFileStream;
begin
  // otwiera plik do odczytu i jednocześnie blokuje go przed dostępem do zapisu
  stream := TFileStream.Create(fName, fmOpenRead or fmShareDenyWrite);
  try
    SetLength(Result, stream.Size);
    stream.Read(Result[1], stream.Size);
  finally
    stream.Free;
  end;
end;
  • Zapisz ciąg string txt do pliku fName.
uses
  Classes, SysUtils;

procedure SaveToFileStream(fName, txt: string);
var
  stream: TFileStream;
  size: longint;
begin
  stream := TFileStream.Create(fName, fmCreate);
  size := Length(txt);
  try
    stream.Position := 0;
    stream.Write(txt[1], size);
  finally
    stream.Free;
  end;
end;


Zobacz także