HyperLink
Bejelentkezés
E-mail: 
Jelszó: 





Skip Navigation Links
 

Stream tartalmának elhelyezése egy EXE állományban


Példaprogram letöltése

5137 bájt

Ebben a példában megnézzük, hogy hogyan tudjuk egy tetszőleges Stream tartalmát elmenteni egy exe állományba. A mentést természetesen úgy végezzük el, hogy az exe állomány is működőképes maradjon és a Stream tartalma is visszaolvasható legyen.

A mellékelt Project1 példaprogram futtatása előtt a Test.dpr állományban található Project-et fordítsa le.
Egy exe állományban a program kezdete és vége egyformán meghatározott. Az exe állománynak a végéhez bármit hozzáfűzhetünk, az nem befolyásolja a program futását.
Az állomány bővítéséhez és a Stream visszaolvasásához a TFileStream osztályt használjuk. Mentésnél értelemszerűen változik az exe állomány tartalma. Ez olyan művelet, amelyet nem lehet végrehajtani éppen futás alatt lévő exe állományon. A visszaolvasást már nem befolyásolja, hogy az adott program fut-e.
A mentést az AttachToFile függvénnyel hajtjuk végre.
function AttachToFile(const FileName: string; MStream: TMemoryStream): Boolean;
Bemenő paraméterként az állomány nevét és az elmentendő Stream-et kell megadnunk.
A függvény belsejében a megadott exe állományt az alábbi módon nyithatjuk meg írásra:
Stream:=TFileStream.Create(FileName,fmOpenWrite or fmShareDenyWrite);
Az adatok írását az állomány végétől kell elkezdenünk.
Stream.Seek(0,soFromEnd);
Visszaolvasásnál tudnunk kell majd, hogy mekkora adatmennyiséget kell visszaolvasnunk. Ehhez tárolnunk kell az állomány végén a beírt adatmennyiséget, egy integer változó segítségével.
iSize:=MStream.Size+SizeOf(Integer);
Stream.Write(iSize,SizeOf(iSize));
Visszaolvasásnál az egyetlen pont amihez viszonyítani tudunk majd, az az állomány vége.
A Stream visszaolvasását a LoadFromFile függvény végzi.
function LoadFromFile(const FileName: string; MStream: TMemoryStream): Boolean;
A FileName paraméterben a megnyitandó állomány nevét kell megadnunk. A beolvasott adatfolyam az MStream paraméterben megadott változóba kerül.
A Stream visszaolvasásánál az állomány megnyitásának módja a következő:
Stream:=TFileStream.Create(FileName,fmOpenRead or fmShareDenyWrite);
Először ki kell olvasnunk az előzőleg eltárolt adatfolyam méretét. A méret tárolásához egy integer típusú változót használtunk. Ennek megfelelően kell pozícionálnunk az állomány végéhez viszonyítva.
Stream.Seek(-SizeOf(Integer),soFromEnd);
Stream.Read(iSize,SizeOf(iSize));
A beolvasott méretnek megfelelően ismételten pozícionálnunk kell az állományban, valamint be kell állítanunk az MStream méretét.
MStream.SetSize(iSize-SizeOf(Integer));
A fájl tartalmát a CopyFrom metódus segítségével másolhatjuk át az MStream-be.
Stream.CopyFrom(Stream,iSize-SizeOf(iSize));

Könyv
Ez a cikk megtalálható ebben a könyvben: Delphi Software Offline 2003 évkönyv 219. oldal

Felhasználási feltételek
A Software Online szoftverfejlesztői magazin mindegyik cikke, minden megjelent képe, és egyéb publikált anyaga szerzői jog védelme alatt áll! Bármilyen formában történő másodlagos terjesztésük, közzétételük vagy felhasználásuk kizárólag a kiadó előzetes írásbeli engedélyével történhet!

Copyright © 1999-2012 Animare Software Kft. Minden jog fenntartva!
| Készült: Animare Stúdió | Adatvédelem | Kapcsolat |