Einzelnen Beitrag anzeigen

Benutzerbild von Boombuler
Boombuler

Registriert seit: 14. Mär 2003
Ort: Osnabrück
244 Beiträge
 
Delphi 2009 Professional
 
#51

Re: "Login" für eigenes Programm realisieren

  Alt 25. Jul 2004, 12:56
Hi

@Sharky: das sollte keineswegs abwertend wirken...

tipp von mir:
1. die Inidatei noch simpel verschlüsseln (zB XOR)
2. Die Inidatei komplett hinter die Main-Exe oder eine andere datei deines Programms schreiben (Code dazu weiter unten)
3. Die Checksumme der Main-Exe (incl. Ini-datei) gesondert speichern und bei programmstart überprüfen...

Damit hängt man eine Datei hinter eine andere (besser gesagt einen MemoryStream hinter eine datei)
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;

Und damit bekommt man seinen Stream aus der Datei zurück:
Delphi-Quellcode:
function TForm1.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;

MfG
Boombuler
  Mit Zitat antworten Zitat