Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Problem mit FileRead (https://www.delphipraxis.net/49237-problem-mit-fileread.html)

Totti 7. Jul 2005 15:59


Problem mit FileRead
 
Moin,
leider scheint er bei flgendem Code absolut nichts bei FIleRead einzulesen :(
Delphi-Quellcode:
const
  SzaSize=488960;
  fsSize=80896;

{...}

function extractExe: boolean;
var
  aHdl,bHdl,t: Integer;
  SzaBuf: Array[1..SzaSize] of byte;
  fsBuf: Array[1..fsSize] of byte;

  aHdl:=FileOpen(Application.ExeName, fmShareDenyNone or fmOpenRead);
  bHdl:=FileCreate(FMDir+'Stadia.tex\7za.exe');
  t:=FileSeek(aHdl, SzaSize+fsSize, 2);
  t:=FileRead(aHdl, SzaBuf, SizeOf(SzaBuf));
  t:=SizeOf(SzaBuf);
  t:=FileWrite(bHdl, SzaBuf, SizeOf(SzaBuf));
  FileClose(bHdl);

Irgendwelche Ideen, was falsch gelaufen sein könnte?
Kann Delphi evtl. nur einen FileStream zur zeit bedienen (wobei dann der Sinn von handles wohl in Frage gestellt wäre :D) ?

barf00s 7. Jul 2005 16:02

Re: Problem mit FileRead
 
wenn du ne exe in ein programm reinkompilierst, dann könntest die als Resource einbinden... und dann später einwandfrei und leicht mit nem TResourceStream wieder rausladen ..... dann brauchst hier nich mit File* rumzugurken





hmmm das dein code nich funzt, kann daran liegen das der zielname nich korrekt angegeben iss "FMDir+'Stadia.tex\7za.exe'"

ich kann mir schon denken das stadia.tex nen ordner iss ... aber kA ob das die File* Winapi richtig schnallt

Totti 7. Jul 2005 16:08

Re: Problem mit FileRead
 
Naja, lt. meines Debuggins haperts ja schon beim Einlesen.

Aber mit Ressourcen hab ich bishe rnoch nicht wirklich gearbeitet, wenn det einfacher ist, würd ich das natürlich gern erlernen :)

barf00s 7. Jul 2005 16:15

Re: Problem mit FileRead
 
ja des .rc script würde dann wie folgt aussehen

<rc>
myEXE RC_DATA c:\foobar\program.exe
</rc>

ohne rc tags natürlich :)

dann kompilierst die

brcc32.exe myRC.rc

[edit] natürlich nicht vergessen dann die entstandenee .res file in dein program einzubinden über {$R myRC.res}[/edit]

und denn kannst in deinem program

Delphi-Quellcode:
var
  xRS: TResourceStream;
  xFS: TFileStream;

begin
  xRS := TResourceStream(hInstance, 'myEXE'); // oder so ähnlich - bin mir grad nich sicher
  xFS := TFileStream.Create('C:\new\blah.exe', fmCreate);
  try
    xRS.Position := 0;
    xFS.CopyFrom(xRS, xRS.Size);
  finally
    FreeAndNil(xRS);
    FreeAndNil(xFS);
  end;
end;

Totti 7. Jul 2005 18:31

Re: Problem mit FileRead
 
Zitat:

Zitat von barf00s
xRS := TResourceStream(hInstance, 'myEXE'); // oder so ähnlich - bin mir grad nich sicher

Es klappt auch nicht ganz und ich denke schon, dass es ddiese Zeile da sein könnte. Denn er findet die Resource nicht und ich bin mir eigtl. sicher, dass ich da keien Tippfehler drin hab.




P.S.: Aber fürsn Rest schonmal ein dickes DaNKE!! :)


achso, ich hab die zeile folgendermaßen:
exeRS:=TResourceStream.Create(hInstance,'7zaEXE',R T_RCDATA);

aber geht trotzdem nicht ;)


Edit2:
Ah, man sollte auch schon bei der .rc Datei "RT_RCDATA" verwenden . nun klappt alles bestens, danke!

barf00s 8. Jul 2005 09:02

Re: Problem mit FileRead
 
RT_RCDATA wars ^^ tschuldigung ;)


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:31 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