Autor Beitrag
Biarchiv
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 688



BeitragVerfasst: Di 06.08.02 12:53 
Hallo,

Habe mir folgenden Code von Swissdelphicenter Tips besorgt:
ausblenden volle Höhe 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 31



BeitragVerfasst: Di 06.08.02 14:06 
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2931

XP Prof, Vista Business
D6, D2k5-D2k7 je Prof
BeitragVerfasst: 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!

_________________
gringo pussy cats - eef i see you i will pull your tail out by eets roots!
Biarchiv Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 688



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 31



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 699

WinXP, Win98SE, Debian, Win95
D5 Stand, D6 Prof
BeitragVerfasst: 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:

ausblenden Quelltext
1:
function ~Name~(~Parameter~: ~Typ~;...)~ergebnisstyp;					


Beispiel:

ausblenden 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

_________________
"Viel von sich reden, kann auch ein Mittel sein, sich zu verbergen."
Friedrich Nietzsche