13.01.2023, Vladimír Klaus, navštíveno 400x

Delphi

Tento článek spojuje dvě velmi užitečné věci. Jednak ukazuje, jak se dá připravit "rozšíření" třídy, čemuž se říká "class helper". A toto rozšíření hned použijeme pro napsání metody pro načtení souboru do StringListu, ale tak, že nebude vadit, když je soubor zamknutý. To bývá například *.CSV, když je otevřen v MS Excelu apod. A pokud potřebujeme data jen číst, tak klasické LoadFromFile končí chybou.

Tak nejprve to rozšíření:

//Rozšíření třídy pro StringList
TStringListHelper = class helper for TStringList
public
  procedure LoadFromFileReadOnly(const FileName: string);
end;

Pak už velmi jednoduchá implementace přes stream, u kterého je možné nastavit mód čtení.

//vlastní implementace pomocí streamu
procedure TStringListHelper.LoadFromFileReadOnly(const FileName: string);
begin
  var stream := TFileStream.Create(filename, fmOpenRead or fmShareDenyNone);
  try
    //zde je nejzásadnější "self", přes který se odkazujeme na instanci této třídy
    self.LoadFromStream(stream);

  finally
    stream.Free;
  end;
end;

A to je vše, v kódu ihned vidíme novou metodu mezi nabízenými:

Jak v Delphi pomocí Class Helperu připravit načítání dat ze zamčeného souboru do StringListu

Zdroje: