Entwickler-Ecke
Dateizugriff - Dateiname an EXE
Biarchiv - Di 06.08.02 12:53
Titel: Dateiname an EXE
Hallo,
Habe mir folgenden Code von Swissdelphicenter Tips besorgt:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78:
| 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; aStream.SaveToFile(' ?????? '); Wie kann er hier den Dateinamen ermitteln? // AttachToFile('Test.exe', aStream); aStream.Free; end;
procedure TForm1.LoadClick(Sender: TObject); var aStream: TMemoryStream; begin aStream := TMemoryStream.Create; LoadFromFile('Test.exe', aStream); Wie kann er hier den Dateinamen reinschreiben Memo1.Lines.LoadFromStream(aStream); aStream.Free; end; |
Wie kann er den Dateinamen in der Procedure mitreinschreiben und auch wieder rausnehen?
Es soll der Dateiname auch mitreingeschrieben werden sowie
er soll das wieder nehmen und die Datei wieder richtig benennen.
Code-Tags hinzugefügt. Tino
t-ob-i - Di 06.08.02 14:06
Quelltext
1: 2: 3:
| Wie kann er den Dateinamen in der Procedure mitreinschreiben und auch wieder rausnehen? Es soll der Dateiname auch mitreingeschrieben werden sowie er soll das wieder nehmen und die Datei wieder richtig benennen. |
Bitte ander formulieren. Ich spreche diese Spache nicht...
Tobias
Motzi - Di 06.08.02 14:59
Der Tipp stammt von mir und ich würde dir auch gerne helfen damit klarzukommen, aber wie Tobi schon gesagt hat wäre eine genauere/klarere Formulierung/Schilderung deines Problems nicht schlecht!
Biarchiv - Di 06.08.02 15:55
Hallo,
Der Code funktioniert.
Wie kann ich die procedure so ändern das er auch den Dateinamen mitreinschreiben kann und auch den Dateinamen wieder als String einlesen und wieder richtig benennen kann.
Das soll ein Art EXE Joiner werden nur das er auch DLL aus mit richtigen namen generieren kann.
Diese Procedure schreibt die Dateigröße am ende jeder file hinten dazu. Nur muß das so geändert werden dass er auch den Dateinamen hinten hinzufügt.
Hoffe das war verständlich.
t-ob-i - Di 06.08.02 18:21
Motzi hat folgendes geschrieben: |
Der Tipp stammt von mir und ich würde dir auch gerne helfen damit klarzukommen, aber wie Tobi schon gesagt hat wäre eine genauere/klarere Formulierung/Schilderung deines Problems nicht schlecht! |
Dann überlasse ich dir einmal die Hilfe bevor ich mich durch einen fremden Code bemühme :D
Tobias
MathiasH - Di 06.08.02 19:59
vielleicht habe ich dein Problem fasch verstanden, aber es hört sich so an als ob du keine
Functions kennst, wenn das der Fall ist:
Aussehen: eine Funktion sieht fast genauso wie eine Prozedur aus, mieinem unterschied: sie liefert einen Wert zurück:
Quelltext
1:
| function ~Name~(~Parameter~: ~Typ~;...)~ergebnisstyp; |
Beispiel:
Quelltext
1: 2: 3: 4: 5: 6:
| Function firstletter(s: string): char; begin Result := s[0]; //oder firstletter := s[0] end; |
in deinem Fall müsstest du den ganzen code in neue Funktionen umschichten oder du deklariert einfach ein Paar globale variablen (in Unit.var), in denen du deine Werte speicherst., und dann nachher mit ausgibst.
MathiasH
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!