13.01.2023, Vladimír Klaus, navštíveno 502x
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:
Zdroje: