A delphi fájl méretének meghatározása
Mielőtt még soha nem voltam a Delphi fájl méretének meghatározása. De miután megláttam a "hogyan lehet meghatározni a fájlméretet" valahol, azt is érdekelték.
A fájl mérete megegyezik a híres rajzfilm növekedési boa meghatározásával! Hány bájt, illeszkedik a méretéhez. A terv a következő:- Adja meg az adat típusát 1 bájtra. Ez lesz rekord.
- Adjon meg egy ilyen típusú fájlváltozót.
- Kezdjük a fájl elejével, és véget érünk. Hány átmenet - annyi bájt a fájlban!
eljárás TForm1.ButtonClick (Sender: TObject);
típus TSize = Rekord
Csali: byte;
végén;
var F: TSize fájl;
Méret: egész;
kezdődik
Méret: = 0;
az OpenDialog1 segítségével
ha az Execute majd
kezdődik
AssignFile (F, Fájlnév);
Reset (F);
míg (nem EOF (F))
kezdődik
Méret: = Méret + 1;
keresés (F, méret);
végén;
Form1.Caption: = IntToStr (méret); // A méretadatok megjelenítése az űrlap fejlécében
CloseFile (F);
végén;
végén;
A programot öt percen belül írták, ahogy azt mondják: "a térdre". Működik, és akár több megabyte méretű fájlok esetében az eredmény várakozási ideje kicsi, néhány másodperc. Nagy fájlok esetén a várakozás késik, és a program "felfüggesztve" néz ki. Megváltoztathatja a programot úgy, hogy számít kilobájtra (cserélje ki a keresetet (F, Méret) keresni (F, Méret * 1024)). A munka sebessége 1024 alkalommal nő, és elfogadható lesz.
Ez egy újabb bizonyíték a fájlok kezelésének módszereiről. De valójában minden sokkal könnyebb! A fájl méretét a beépített FileSize függvény adja vissza. És elég, ha leírja a fájlt, hogy rendelkezik ilyen típusú byte-val:
eljárás TForm1.ButtonClick (Sender: TObject);
var F: bájt fájl;
Méret: egész;
kezdődik
az OpenDialog1 segítségével
ha az Execute majd
kezdődik
AssignFile (F, Fájlnév);
Reset (F);
Méret: = Fájlméret (F);
Form1.Caption: = IntToStr (méret); // A méretadatok megjelenítése az űrlap fejlécében
CloseFile (F);
végén;
végén;
Van egy alternatív mód a Delphi fájlok kezelésére. amelyben a fájlt objektumként kezelik. A fájlméret meghatározásához beépített módok is vannak. Én is megadom az egész eljárást:
eljárás TForm1.ButtonClick (Sender: TObject);
var F: TFileStream;
kezdődik
az OpenDialog1 segítségével
ha az Execute majd
kezdődik
F: = TFileStream.Create (Filename, fmOpenRead);
Felirat: = IntToStr (F.Size);
F.Free;
végén;
végén;
Ez az eljárás kompaktabbnak tűnik, gyorsabban működik, de további képzést igényel.