Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Durchsuchen von Dateien (https://www.delphipraxis.net/134962-durchsuchen-von-dateien.html)

Johannes013 2. Jun 2009 10:32


Durchsuchen von Dateien
 
Hallo,

Ich bin neu in Delphi 5. Ich habe ein Programm geschrieben, mit einer Passwortbestätigung. Das Passwort wird vom Programm automatisch in der Datei "login.txt" gespeichert. Ich möchte nun über sie Methode Button1Click die Datei login.txt durchsuchen lassen und er soll überprüfen, ob das Passwort mit dem eingegebenen übereinstimmt.

Danke im voraus. :?:

Johannes :?

PS: das Passwort ist "passwort01" (als bsp.)

Luckie 2. Jun 2009 10:33

Re: Durchsuchen von Dateien
 
Guck dir mal Ini-dateien an und die Delphiklasse TIniFiles. Da musst du nichts durchsuchen.

SimStar001 2. Jun 2009 10:36

Re: Durchsuchen von Dateien
 
Oder wenn das Programm nur ein Passwort benötigt, dann lade die datei in eine Liste oder einen Stream und lies dort die erste Zeile aus, und dann haste dein Passwort

Johannes013 2. Jun 2009 10:45

Re: Durchsuchen von Dateien
 
Könntet ihr mir ein kleines Beispiel geben. Ich kenne ich noch nicht so gut aus.
Eins weiß ich ja:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
   Append(Datei);
  [Der Befehl fehlt mir]
   if passwort='passwort01' then
      Labe11.Caption:='Korrekt!'
   else
      Labe11.Caption:='Falsch';
end;
aber mehr auch nicht.

Johannes :wiejetzt: :?:

[edit=mkinzler]Fett-Foramtierung durch Delphi-Tag ersetzt Mfg, mkinzler[/edit]

mkinzler 2. Jun 2009 10:48

Re: Durchsuchen von Dateien
 
Hast du dir TIniFile mal näher angesehen?

markus5766h 2. Jun 2009 10:58

Re: Durchsuchen von Dateien
 
Hallo.
ich weiß zwar nicht genau, wofür Dein Passwort benutzt werden soll
(Stichwort Sicherheit ?)
Um mehrere Möglichkeiten der Verarbeitung zu haben, benutze doch folgendes:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
PasswordList : TStringList;
i, n, l :Integer;
begin
PasswordList := TStringList.Create;                  // StringList erzeugen
PasswordList.LoadFromFile('[dateiname]');            // datei in StringList laden
if Copy(PasswordList[i], n, l) = 'dein Passwort' then // Passwort-Abfrage
 begin
  // wenn dein Passwort übereinstimmt, dann .....
 end;
PasswordList.Free;  // StringList wieder freigeben
end;
i ist die Position deines Passwortes, z.B. i := 5; Dein Passwort ist in der 6. Zeile
n ist die Anfangsposition deines Passwortes, z.B. n := 10; Dein Passwort beginnt ab Zeichen 10
l ist die Länge deines Passwortes
die obige Prozedur setzt voraus, dass dein Passwort in einem zumindest einzeiligen Text
gespeichert ist und an Position n mit einer Länge l vorhanden ist.
zu beachten :
Die Eigenschaft Count der StringList beginnt bei 0
Die Position im String beginnt bei 1

Wenn Sicherheit überhaupt keine Rolle spielt, ist TIniFile 'ne sehr gute Möglichkeit
da Du über die Eigenschaften [Section]und den Bezeichner in der Section explizit auf
Dein Passwort zugreifen kannst.

p80286 2. Jun 2009 11:09

Re: Durchsuchen von Dateien
 
Hallo Johannes,

zum einen ist das Vorgehen was Markus aufgezeigt hat sehr empfehlenswert, zum anderen kannst Du eine Text-Datei auch so auslesen

Delphi-Quellcode:
var
  datei : text;                
  satz  : string;
  buffer : array [0..4095] of byte;

.....

assignfile(datei,'C:\temp\pw_file.txt');
settextbuf(buffer);
reset(datei);
repeat
  readln(datei,satz); //hier wird jede Zeile einzeln gelesen
  // bearbeite Satz
until eof(datei);
closefile(datei);
Und mit TInifile kannst Du problemlos Wertepärchen wie
PASSWORT = MeinPasswort
lesen und schreiben. Dann bleibt Dir die Arbeit mit Pos und Copy erspart.

Gruß
K-H

Johannes013 2. Jun 2009 11:17

Re: Durchsuchen von Dateien
 
Das verfahren von Markus hat mir sehr geholfen. Ich hab's hingekriegt. Aber eine Frage hab' ich noch:

Wie kann man Delphi sagen, dass er die Datei pw_file.ini im Unterordner UO2 speichern soll, egal wo Project1.exe liegt?


Danke!


Johannes


PS:Diese Forum ist echt super![i][b]


:coder:

markus5766h 2. Jun 2009 11:26

Re: Durchsuchen von Dateien
 
Hallo,

Delphi-Quellcode:
ForceDirectories([dein Programmverzeichnis]+'\'+[dein Unterverzeichnis]);
ForceDirectories prüft, ob ein Verzeichnis vorhanden ist und erstellt dieses, wenn nicht vorhanden

Dein Programmverzeichnis bekommst Du mit
Delphi-Quellcode:
var
p : array[0..512] of Char;
begin
ProgDir := StrPas(GetCurrentDirectory(512, P));
.
.
.
end;
Die Variable ProgDir als String in private oder public deklarieren

mkinzler 2. Jun 2009 11:28

Re: Durchsuchen von Dateien
 
Und das Verzeichnis der Exe kannst du mit ExtractFilePath( Paramstr(0)) ermittlen.
Ich würde mir aber TIniFile doch mal ansehen!

DP-Maintenance 2. Jun 2009 11:39

DP-Maintenance
 
Dieses Thema wurde von "Sharky" von "Freeware" nach "Sonstige Fragen zu Delphi" verschoben.
Ist ja keine Vorstellung eines eigenen Programmes ;-)

Johannes013 2. Jun 2009 11:44

Re: Durchsuchen von Dateien
 
Danke........und wie kann man den Dateiinhalt löschen?


Johannes

PS: Ich weiß, ich frage viel!




:angel2:

mkinzler 2. Jun 2009 11:47

Re: Durchsuchen von Dateien
 
So durch überschreiben. Aber in deinem Fall wären die Funktionen von TiniFile gut geeignet zu sein. Du ignorierst diesen Tipp aber konsequent. Vielleicht solltest du dieses Vorgehen mal überdenken!

Johannes013 2. Jun 2009 11:50

Re: Durchsuchen von Dateien
 
Es ist nicht so, dass ich diesen Tipp ignoriere. Ich komme mit der Hilfe von Delphi 5 nicht klar! :(

Diese Beispiele und so verstehe ich nicht. Wir lernen das gerade erst in der Schule.

markus5766h 2. Jun 2009 11:51

Re: Durchsuchen von Dateien
 
Der Vollständigkeit halber :

Delphi-Quellcode:
 var
  fullFileName : string;

begin
  // Set up a full file name with drive and path
  fullFileName := 'C:\Program Files\Borland\Delphi7\Projects\Unit1.dcu';

  // Show the component parts of this full name
  ShowMessage('Drive = '+ExtractFileDrive (fullFileName));
  ShowMessage('Dir  = '+ExtractFileDir  (fullFileName));
  ShowMessage('Path = '+ExtractFilePath (fullFileName));
  ShowMessage('Name = '+ExtractFileName (fullFileName));
  ShowMessage('Ext  = '+ExtractFileExt  (fullFileName));
end;

Show full unit code
   Drive = C:
   Dir  = C:\Program Files\Borland\Delphi7\Projects
   Path = C:\Program Files\Borland\Delphi7\Projects\
   Name = Unit1.dcu
   Ext  = .dcu

mkinzler 2. Jun 2009 11:53

Re: Durchsuchen von Dateien
 
Sehr innovativ den festen Pfad im Programm vorzugeben :shock:

Satty67 2. Jun 2009 11:55

Re: Durchsuchen von Dateien
 
Thema TIniFile:

Die Hilfe gehört mit noch zum Besten der alten IDE...

Hilfe -> TIniFile dort Methode Create (oder gleich Hilfe zu TCustomIniFile.Create).

Dort gibt es ein schönes Beispiel mit zwei Buttons (lesen/schreiben)... ich darf es nicht posten, (c) Borland, aber einfacher geht es ja kaum.

Luckie 2. Jun 2009 11:56

Re: Durchsuchen von Dateien
 
Zitat:

Zitat von markus5766h
Dein Programmverzeichnis bekommst Du mit
Delphi-Quellcode:
var
p : array[0..512] of Char;
begin
ProgDir := StrPas(GetCurrentDirectory(512, P));
.
.
.
end;

Wie oft denn noch. GetCurrentDirectory liefert nicht das anwendungsverzeichnis, sondern das aktuelle Verzeichnis. Das kann das Anwendungsverzeichnis sein, muss aber nicht.

Den Pfad inklusive Name der Exe-Datei bekommt man mit Delphi-Referenz durchsuchenParamStr.

Johannes013 2. Jun 2009 12:03

Re: Durchsuchen von Dateien
 
Danke.... :wall:

markus5766h 2. Jun 2009 12:11

Re: Durchsuchen von Dateien
 
Hier mal ein Beispiel zu TIniFile:

Delphi-Quellcode:
uses IniFiles;

procedure ReadIni;
var
Ini : TIniFile;
Password : String;
begin
 Ini:= TIniFile.Create(Pfad und Dateiname);
 Password := Ini.ReadString('Password', 'PW1', 'Fehler');
 Ini.Free;
end;

procedure SaveIni;
var
Ini : TIniFile;
Password : String;
begin
 Ini := TIniFile.Create(Pfad und Dateiname);    
 Ini.WriteString('Password', 'PW1', Password);
 Ini.Free;
end;
Deine Ini-Datei muss jetzt so aussehen:

[Password]
PW1=[dein Passwort]

Johannes013 2. Jun 2009 12:15

Re: Durchsuchen von Dateien
 
Danke. Jetzt hat's gefunkt.

:dancer2:


Johannes

markus5766h 2. Jun 2009 12:17

Re: Durchsuchen von Dateien
 
Zitat:

Zitat von Luckie
Zitat:

Zitat von markus5766h
Dein Programmverzeichnis bekommst Du mit
Delphi-Quellcode:
var
p : array[0..512] of Char;
begin
ProgDir := StrPas(GetCurrentDirectory(512, P));
.
.
.
end;

Wie oft denn noch. GetCurrentDirectory liefert nicht das anwendungsverzeichnis, sondern das aktuelle Verzeichnis. Das kann das Anwendungsverzeichnis sein, muss aber nicht.

Den Pfad inklusive Name der Exe-Datei bekommt man mit Delphi-Referenz durchsuchenParamStr.

O.K.
GetCurrentDirectory funktioniert nur korrekt im Ereignis On Create, da sich
im weiteren Programmverlauf das aktuelle Arbeits-Verzeichnis ja schon geändert
haben kann

mkinzler 2. Jun 2009 12:19

Re: Durchsuchen von Dateien
 
Zitat:

O.K.
GetCurrentDirectory funktioniert nur korrekt im Ereignis On Create, da sich
im weiteren Programmverlauf das aktuelle Arbeits-Verzeichnis ja schon geändert
haben kann
Kann dann auch schon falsch sein. Z.B. wenn über Verknüpfung gestartet wird, in welcher ein anderes Arbeitsverzeichnis vorgegeben ist

markus5766h 3. Jun 2009 11:22

Re: Durchsuchen von Dateien
 
@ mkinzler
wenn ich eine Anwendung per Verknüpfung mit anderem Arbeitsverzeichnis starte:
zu welchem Zeitpunkt - wenn nicht nach OnCreate - wird dann dieser Parameter
verarbeitet ?

Luckie 3. Jun 2009 11:47

Re: Durchsuchen von Dateien
 
Zitat:

Zitat von markus5766h
Hier mal ein Beispiel zu TIniFile:

Delphi-Quellcode:
uses IniFiles;

procedure ReadIni;
var
Ini : TIniFile;
Password : String;
begin
 Ini:= TIniFile.Create(Pfad und Dateiname);
 Password := Ini.ReadString('Password', 'PW1', 'Fehler');
 Ini.Free;
end;

procedure SaveIni;
var
Ini : TIniFile;
Password : String;
begin
 Ini := TIniFile.Create(Pfad und Dateiname);    
 Ini.WriteString('Password', 'PW1', Password);
 Ini.Free;
end;

Ich vermisse sehnlichst die Ressourcenschutzblöcke und eine Fehlerbehandlung.

mkinzler 3. Jun 2009 22:08

Re: Durchsuchen von Dateien
 
Zitat:

Zitat von markus5766h
@ mkinzler
wenn ich eine Anwendung per Verknüpfung mit anderem Arbeitsverzeichnis starte:
zu welchem Zeitpunkt - wenn nicht nach OnCreate - wird dann dieser Parameter
verarbeitet ?

Dann ist das Verzeichnis von Anfang an nicht das Verzeichnis der Exe


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