AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

EXE-Datei überschreiben mit blockwrite?

Ein Thema von Lyan · begonnen am 21. Aug 2012 · letzter Beitrag vom 21. Aug 2012
Antwort Antwort
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#1

AW: EXE-Datei überschreiben mit blockwrite?

  Alt 21. Aug 2012, 15:36
Es ist mal wieder Zeit für die unentbehrlichen Funktionen StringToFile() und FileToString():
Delphi-Quellcode:
procedure StringToFile(const FileName: string; const Contents: AnsiString; append:Boolean=False);
const
   SO_END=2;
var
  fs: TFileStream;
  Len: Integer;
begin
  if append and FileExists(filename) then
  begin
    fs := TFileStream.Create(FileName, fmOpenReadWrite or fmShareDenyWrite);
  end
  else
  begin
    fs := TFileStream.Create(FileName, fmCreate);
    append := False;
  end;
  try
    if append then
      fs.Seek(0, SO_END); // faster than .Position := .Size
    Len := Length(Contents);
    if Len > 0 then
    {$IFDEF CLR}
      fs.WriteBuffer(BytesOf(Contents), Len);
    {$ELSE}
      fs.WriteBuffer(Contents[1], Len);
    {$ENDIF CLR}
  finally
    fs.Free;
  end;
end;

function FileToString(const FileName: string): AnsiString;
var
  fs: TFileStream;
  Len: Integer;
  {$IFDEF CLR}
  Buf: array of Byte;
  {$ENDIF CLR}
begin
  fs := TFileStream.Create(FileName, fmOpenRead or fmShareDenyWrite);
  try
    Len := fs.Size;
    SetLength(Result, Len);
    if Len > 0 then
    {$IFDEF CLR}
    begin
      SetLength(Buf, Len);
      fs.ReadBuffer(Buf, Len);
      Result := Buf;
    end;
    {$ELSE}
      fs.ReadBuffer(Result[1], Len);
    {$ENDIF CLR}
  finally
    fs.Free;
  end;
end;
Andreas
  Mit Zitat antworten Zitat
gammatester

Registriert seit: 6. Dez 2005
999 Beiträge
 
#2

AW: EXE-Datei überschreiben mit blockwrite?

  Alt 21. Aug 2012, 15:42
Es könnten nach dem richtigen Einlesen aber immer noch VCL-Routinen auf pchar-Basis benutzt werden, die beim ersten 0-Byte die Grätsche machen (es gibt sicherlich einige Nullen in den ersten paar Hundert Bytes des EXE-Headers). Danach nützt auch kein korrektes Rausschreiben mehr. Deshalb wäre es wichtig, die genaue Anzahl der geschriebenen Bytes zu wissen und nicht nur die KB.
  Mit Zitat antworten Zitat
Antwort Antwort


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 12:34 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz