AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Dateien an eine exe Datei mit dranhängen
Thema durchsuchen
Ansicht
Themen-Optionen

Dateien an eine exe Datei mit dranhängen

Ein Thema von Eagelone · begonnen am 27. Dez 2003 · letzter Beitrag vom 17. Mär 2004
 
Eagelone

Registriert seit: 31. Aug 2003
Ort: Augsburg
15 Beiträge
 
#1

Dateien an eine exe Datei mit dranhängen

  Alt 27. Dez 2003, 12:01
Hallo liebe Community!

Ich habe folgendes Problem:
Ich habe mir ein Programm geschrieben, was aus 2 Teilen besteht: Dem Wizard zum Erstellen von 2 Konfigurationsdateien und dem Hauptprogramm was Informationen aus den beiden Konfigurationsadateien ausliest.

Jetzt möchte ich es so machen, dass der Wizard die 2 erstellten Konfiguartionsdateien mit an die exe-Datei des Hauptprogrammes anhängt bzw. einbindet.
Weil im Moment muss ich immer alle 3 Dateien weitergeben:
Die 2 Konfigurationsdateien und das Hauptprogramm. Und das soll dann jetzt alles nur noch eine Datei sein!

Das habe ich jetzt so realisiert:
Delphi-Quellcode:
function AttachToFile(const AFileName: string; MemoryStream: TMemoryStream): Boolean;
var
  aStream: TFileStream;
  iSize: Integer;
begin
  Result := False;
  if not FileExists(AFileName) then
    Exit;
  try
    aStream := TFileStream.Create(AFileName, fmOpenWrite or fmShareDenyWrite);
    MemoryStream.Seek(0, soFromBeginning);
    // seek to end of File
    // ans Ende der Datei Seeken
    aStream.Seek(0, soFromEnd);
    // copy data from MemoryStream
    // Daten vom MemoryStream kopieren
    aStream.CopyFrom(MemoryStream, 0);
    // save Stream-Size
    // die Streamgröße speichern
    iSize := MemoryStream.Size + SizeOf(Integer);
    aStream.Write(iSize, SizeOf(iSize));
  finally
    aStream.Free;
  end;
  Result := True;
end;

function LoadFromFile(const AFileName: string; MemoryStream: TMemoryStream): Boolean;
var
  aStream: TFileStream;
  iSize: Integer;
begin
  Result := False;
  if not FileExists(AFileName) then
    Exit;

  try
    aStream := TFileStream.Create(AFileName, fmOpenRead or fmShareDenyWrite);
    // seek to position where Stream-Size is saved
    // zur Position seeken wo Streamgröße gespeichert
    aStream.Seek(-SizeOf(Integer), soFromEnd);
    aStream.Read(iSize, SizeOf(iSize));
    if iSize > aStream.Size then
    begin
      aStream.Free;
      Exit;
    end;
    // seek to position where data is saved
    // zur Position seeken an der die Daten abgelegt sind
    aStream.Seek(-iSize, soFromEnd);
    MemoryStream.SetSize(iSize - SizeOf(Integer));
    MemoryStream.CopyFrom(aStream, iSize - SizeOf(iSize));
    MemoryStream.Seek(0, soFromBeginning);
  finally
    aStream.Free;
  end;
  Result := True;
end;

procedure TForm1.SaveClick(Sender: TObject);
var
  aStream: TMemoryStream;
begin
  aStream := TMemoryStream.Create;
  Memo1.Lines.SaveToStream(aStream);
  AttachToFile('Test.exe', aStream);
  aStream.Free;
end;

procedure TForm1.LoadClick(Sender: TObject);
var
  aStream: TMemoryStream;
begin
  aStream := TMemoryStream.Create;
  LoadFromFile('Test.exe', aStream);
  Memo1.Lines.LoadFromStream(aStream);
  aStream.Free;
end;
Habe das von SwissDelphiCenter.
Ist das eine vernünfitige Lösung oder gibt es noch eine bessere?


Wenn das die Beste ist, dann folgende Fragen:
Die eine Datei von meinen beiden Konfigurationsdateien ist im Ini-Format. Da ist das Einlesen kein Problem, aber die andere Datei wird bei mir wie folgt erstellt:
Delphi-Quellcode:
 
type
  TProdukt = record
    Nummer: integer;
    Beschreibung: string[200];
    Preis: real;
  end;


   begin
      AssignFile(datei, 'test.abc'); // Dateizuweisung
      Rewrite(datei); // Erstellt die Datei
      for i := 0 to Produkte.Items.Count - 1 do // Durchläuft alle Zeilen wobei Produkte eine TListView-Komponente ist
        with Produkte.Items.Item[i] do
        begin
          datensatz.Nummer := StrToInt(Caption); // Spalte 1
          datensatz.Beschreibung := SubItems.Strings[0]; // Spalte 2
          datensatz.Preis := StrToFloat(SubItems.Strings[1]); // Spalte 3
          write(datei, datensatz); // Schreibt die Datei
        end;
      CloseFile(datei);
    end;
Und jetzt ist das Problem, wie ich die wieder einlese.
Bis her habe ich das so gemacht:

Delphi-Quellcode:
    AssignFile(datei, 'test.abc');
    Reset(datei);
    i := 0;
    while (not EOF(datei)) do
    begin
      SetLength(produkte, i + 1);
      read(datei, produkte[i]);
      cbProdukt1.Items.Add(produkte[i].Beschreibung); // cbProdukte ist jeweils eine Combobox
      cbProdukt2.Items.Add(produkte[i].Beschreibung);
      cbProdukt3.Items.Add(produkte[i].Beschreibung);
      cbProdukt4.Items.Add(produkte[i].Beschreibung);
      cbProdukt5.Items.Add(produkte[i].Beschreibung);
      inc(i);
    end;
    CloseFile(datei);
Wie kann ich nun das gleiche damit erreichen, aber so, dass die beiden Dateien trotzdem an die exe-File mit rangehängt werden?

Wie sicher sind die Daten, die ich an die exe-Datei mitranhänge?
Sollte ich die noch verschlüsseln mit RSA oder so bzw. lohnt es sich?

Kann die eigtl. exe-Datei irgendwie Schaden nehmen oder kann es da zu unerwarteten Fehlern kommen?

Hoffe, dass ihr mir helfen könnt!

Danke im Voraus!


Eagelone
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:13 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz