Entwickler-Ecke

Dateizugriff - Datein in *.EXE einbinden


madmat - Do 25.07.02 23:46
Titel: Datein in *.EXE einbinden
Hi @ all,

wie kann man z.B. eine leere Access DB (als Absicherung) mit in eine EXE Datein einbinden und bei Bedarf aus der EXE auf Platte kopieren ?
Ich hab die DB jetzt mit brcc32.exe in eine *.res Datei umgewandelt und nun ?
Wie kann ich sie jetzt in die EXE einbinden und z.B auf Buttonclick wieder auf dem Datenträger speichern ?
Die RES Datei hab ich jetzt per

Quelltext
1:
2:
3:
implementation
{$R *.DFM}
{$R DBRES.res}

eingebunden.
Die Extractionsfunktion hab ich mir zusammengesucht , die sieht jetzt ungefähr so aus :


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
function ExtractRes(ResType, ResName, ResNewName: string): Boolean;
var
  Res: TResourceStream;
begin
  Result := False;
  Res := TResourceStream.Create(Hinstance, Resname, PChar(ResType));
  try
    Res.SavetoFile(ResNewName);
    Result := true;
  finally
    Res.Free;

           end;
    end;

Aber wie rufe ich das Ganze jetzt auf ? Bin ein wenig ratlos,
Danke im Voraus..


hitstec - Fr 26.07.02 02:09

Einfacher gehts so: Mit brcc32 die Datei kompilieren, aber auf diese Weise


Quelltext
1:
ACCESSDB RCDATA C:\DBRES.dbf                    

oder so ähnlich, wichtig ist, dass du als Typ RCDATA nimmst.
dann ins Projekt einbinden


Quelltext
1:
{$R DBRES.res}                    


und die Funktion um die Datei zu extrahieren:


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
function ExtRes(ResName,sZiel: string): Bool;
var stmResource: TResourceStream;
begin
 result:=true;
 try
  stmResource:=TResourceStream.Create(0,ResName,RT_RCDATA);
  try
   stmResource.SaveToFile(sZiel);
  except
   result:=false;
  end;
  stmResource.free;
 except
  result:=false;
 end;
end;


Und zur Laufzeit die Datei entpacken:


Quelltext
1:
if ExtRes('ACCESSDB','C:\dtabase.dbf') then ShowMessage('Datei extrahiert.');                    


Eine Idee wäre die Datei zusätzlich mit ZLib zu komprimieren und zur Laufzeit zu dekomprimieren. So würde man noch die EXE-Datei kleiner halten.


matze - Fr 26.07.02 15:41

oder du verschmilzt die DB mit deiner EXE.

hier das Tut: http://www.delphi-treff.de/content/edhonline/index.php4?id=133


cbs - Fr 26.07.02 15:51

tag auch

matze hat folgendes geschrieben:
oder du verschmilzt die DB mit deiner EXE

funktioniert dann aber noch die EXE? ich glaube nicht!


matze - Fr 26.07.02 18:46

doch !! Das hauptfile bleibt ausführbar !!!

EDH hat folgendes geschrieben:
Nach dem verschmelzen ist die Hauptfile immer noch voll ausführbar (wenn sie keinen CRC Check oder so was besitzt) und die 2. Datei in der Hauptdatei drin.