![]() |
Datei an eine Exe anhängen
Hi, ich wollte mit einem Code aus dem Delphi-Treff eine Datei 'temp.cfg' an meine Exe anhägen, nur leider kommt immer eine Fehler Meldung. Hier erstmal der Code:
Delphi-Quellcode:
Ich habe bis jetzt nichts passendes gefunden, ahbe aber eine Vermutung...
function Save(ExeSize:integer; Mem:TMemo):boolean;
var f2: file; aHdl: Integer; gelesen: longInt; aBuf: Array[1..40000] of byte; Groesse: LongInt; begin Mem.Lines.SaveToFile(ExtractFilePath(Application.ExeName)+'temp.cfg'); AssignFile(f2,ExtractFilePath(Application.ExeName)+ExtractFileName(Application.ExeName)); Reset(f2, 1);// Hier kommt ein E/A-Fehler 32 das ist ein EINOUTERROR. Groesse:=FileSize(f2); CloseFile(f2); aHdl:=FileOpen(ExtractFileName(Application.ExeName),fmOpenReadWrite); FileSeek(aHdl,Groesse,0); AssignFile(f2,ExtractFilePath(Application.ExeName)+'temp.cfg'); Reset(f2,1); while not Eof(f2) do begin BlockRead(f2,abuf,sizeof(abuf),gelesen); FileWrite(aHdl,abuf,gelesen); end; CloseFile(f2); DeleteFile('temp.cfg'); end; Das hier ist die Function, mit der ich die Datei wieder aus der exe bekomme, die wird vor der oben ausgeführt, meine Vermutung ist, dass es daran liegt, da es ohne die zum Lesen wunderbar funktioniert..
Delphi-Quellcode:
Hoffe mal, dass man dadurch kommt.
function Load(ExeSize:integer; Mem:TMemo):boolean;
var aHdl:Integer; aBuf:Array[1..40000] of byte; Gelesen: LongInt; f: file; begin aHdl:=FileOpen(Application.ExeName, fmShareDenyNone or fmOpenRead); FileSeek(aHdl, ExeSize, 0); AssignFile(f, ExtractFilePath(Application.ExeName)+'temp.cfg'); ReWrite(f, 1); Gelesen:=FileRead(aHdl,aBuf,SizeOf(aBuf)); while Gelesen>0 do begin BlockWrite(f,aBuf,Gelesen); Gelesen:=FileRead(aHdl,aBuf,SizeOf(aBuf)); end; CloseFile(f); FileClose(aHdl); Mem.Lines.Loadfromfile(ExtractFilePath(Application.ExeName)+'temp.cfg'); end; Masteric |
Re: Datei an eine Exe anhängen
Ich habe mir deinen Code nicht angeschaut aber ich empfehle dir den
![]() Zitat:
|
Re: Datei an eine Exe anhängen
Zitat:
|
Re: Datei an eine Exe anhängen
Es ist ein ein E/A-Fehler 32 das ist ein EINOUTERROR, hatte das schon im ersten Quelltext mit der stelle wo er auftriit angegeben :-D
Masteric |
Re: Datei an eine Exe anhängen
Mit anderen Worten: er kann die Datei nicht öffnen. Ich würde vermuten, dass ein anderes Programm auf die Datei zugreift oder die Datei schreibgeschützt ist oder erst gar nicht existiert.
|
Re: Datei an eine Exe anhängen
aber warum kommt der Fehler bei dem Reset? :gruebel:
|
Re: Datei an eine Exe anhängen
Ich würde meinen, es kommt eine Zeile vorher.
Du versuchst an eine geöffnete Datei etwas anzuhängen -> das geht nicht. :mrgreen: |
Re: Datei an eine Exe anhängen
Zitat:
Damit das Handle auch wieder freigegeben wird solltest du try...finally benutzen.
Delphi-Quellcode:
Edit: Reset öffnet normalerweise zum Lesen & Schreiben! Setze mal vor AssignFile FileMode auf fmOpenRead für nur Lesen. (das geht natürlich nur für deine Load-Methode. Schreiben ist nicht, wenn die Anwendung läuft!)
try
AssignFile(Handle, 'Dateiname'); Reset(Handle); : : finally CloseFile(Handle); end; Gruss Thorsten |
Re: Datei an eine Exe anhängen
das dachte ich mir schon, dass ich nichts in die exe schreiben kann... dafür war die Function zwar eigenlich gedacht, aber da kann man nichts machen
|
Re: Datei an eine Exe anhängen
Naja, du könntest deine Schreibfunktionen auch auslagern in eine zweite Anwendung. In der Hauptanwendung startest du dann deine zweite Anwendung und beendest die Erste. Dann kann die zweite Anwendung die Änderungen schreiben, startet wieder die Hauptanwendung und beendet sich. Die zweite Anwendung brauch dabei nur eine Konsolenanwendung zu sein.
Ok, war nur mal kurz laut gedacht... Gruss Thorsten |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:47 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