Entwickler-Ecke

Dateizugriff - Variablen in eigenem Programm speichern?


hallo - Do 08.07.04 13:33
Titel: Variablen in eigenem Programm speichern?
Hi,

wie kann ich die Programmkonfiguration im eigenem Programm speichern?
Ich will das ungefähr so machen: Ich habe ein Programm mit Einstellungen(z.B. username in einem Textfeld) und diese will ich IM Programm nach dem Beenden speichern.
D.H. wenn ich jetzt dieses Programm an einem anderen Comüputer starte, müssen die Einstellungen noch da sein.

Ich weiß, dass das mit den Antivirenprogrammen sehr problematisch wird, denn diese halten das dann warscheinlich für einen Virus weil sich die Datei dann halt verändert.

DANKE


Moderiert von user profile iconTino: Topic aus Sonstiges verschoben am So 11.07.2004 um 09:42


Anonymous - Do 08.07.04 13:42
Titel: Re: Variablen in eigenem Programm speichern?
hallo hat folgendes geschrieben:
Ich weiß, dass das mit den Antivirenprogrammen sehr problematisch wird, denn diese halten das dann warscheinlich für einen Virus weil sich die Datei dann halt verändert.


Wurde hier zwar schon öfter erzählt, halte ich aber für groben Unfug. (Siehe Delphi-Compiler)

Das Problem ist dass du während das Programm läuft nicht schreibend darauf zugreifen kannst. Du könntest es aber so machen:

Du kopierst von der Datei die Bytes, die nicht zur Konfiguration gehören in eine Datei (irgendwas.bla)
In eine 2. die Konfiguration (conf.bla)
Du erstellst eine .bat-Datei mit folgendem Inhalt:


Quelltext
1:
2:
3:
4:
copy /B irgendwas.bla + conf.bla dateiname.exe
del irgendwas.bla
del conf.bla
del %0.bat


Jetzt musst Du die datei (irgendwas.bat) ausführen und dein Programm normal beenden lassen. Die Einstellungen kannst du dann entweder per Stream oder über pbyte(oder sonstwas)($00400000 + dateigröße + index)^ lesen.


MartinPb - Do 08.07.04 13:52

Hier hat mal einer behauptet, daß es Unit gibt mit der man die Ressource des eigenen Programms zur Laufzeit verändern kann. Ich weiß nicht ob es stimmt. Wenn es aber stimmt, dann gibt es sowas wie Ressourcestrings. Das sieht in etwa so aus:


Delphi-Quelltext
1:
2:
3:
resourcestring
  Var1 = 'Wert1';
  Var2 = 'Wert2';


Ein Ressourcestring ist eine Ressource. Wenn es also möglich ist eine Ressource zu ändern, dann kannst du auch den Wert des Strings ändern. Schon hast du die Werte im Programm gesichert.

Jetzt mußt du dich nur noch auf die Suche nach der Unit machen, die zur Laufzeit die Ressourcen verändern kann.


Delete - Do 08.07.04 22:31

Motzi hat so eine Unit geschrieben.

@obschtkuche: Der Compiler wird sie vorher löschen. Es wird also keine Anwendung geändert, sondern nur neu erstellt. ;)


hallo - Fr 09.07.04 13:06

Wo gibt es diese Unit?


h-design - Sa 10.07.04 12:53

Hi,
Ich hab auch nach diesem Problem lange gesucht, Turbopascal Bücher nicht wegwerfen, weil dort noch vieles beschrieben ist, was leider in der Delphi Hilfe nicht mehr auftaucht.
Hier die Lösung:
Erstelle erst im Unit-Kopf einen eigenen Record


Delphi-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:
TYPE
daten_ : RECORD
  a : Integer;
  b : Boolean;
  c : STRING[100];
end;
{So könnte dieser Record z.B.aussehen}

{Als nächstes die Deklaration im var Teil des Interface Kopfes}

var

daten : daten_;


implementation

{Jetzt ist es wichtig zu wissen, dass die folgenden Anweisungen nicht in Objektorientierten Prozeduren stehen, also schreib eine eigene Prozedure}

procedure speichern;
var
f : file of daten_;
datei : string;
begin

datei:='ini.dat';
assign(f,datei);
rewrite(f);
write(f,daten);
close (f);

end;


procedure lesen;
var
f : file of daten_;
datei : String;
begin
datei:='ini.dat';
assign(f,datei);
reset(f);
while not EOF(f) do begin
Read(f,daten); 
end;
close(f);
end;


Gruss Herbert


Moderiert von user profile iconPeter Lustig: Delphi-Tags hinzugefügt.


maximus - Sa 10.07.04 14:38

@Herbert: Du bist lustig...das ist so ziemlich das erste was man als Pascal/delphi programmierer kann. Das war aber nicht die frage. Er will daten in der laufenden exe speichern. Da sind dann die meisten mit ihrem latien am ende :wink: