![]() |
Abfrage
Guten Abend,
wollte wissen ob jemand eine Lösung hat: Ich habe: Textfeld 1 ist gleich Benutzername. Textfeld 2 ist gleich Passwort. Also es die Benutzer stehen auf einem server (nur via ftp zugänglich im netzwerk) Name der Datei: tester.txt // tester ist der Benutzername -> Edit1.text Inhalt ist: test // test ist das Passwort -> Edit2.text Meine Frage ist nun wie ich erst überprüfen lassen kann ob die datei tester (Der Benutzer, also Edit1.text) exestiert und dann das Passwort überprüfen lassen kann (Edit2.text, also Inhalt der Datei tester.txt). Vielen Dank in vorraus, :wall: KoGa :wall: |
Re: Abfrage
Und was ist jetzt dein Problem?
Der Zugriff via FTP? --> TIdFTP Das Auslesen der Datei? --> TStringList Das Vergleichen des Inhaltes? ... |
Re: Abfrage
Außer dass das nach einer Datenbank schreit und irgendwie unsicher klingt.
Delphi-Quellcode:
und halt den Inhalt der Textdatei auf Gleichheit prüfen.
function FileExists(const FileName: string): Boolean;
[Edit]Achnee, soll ja auf einem FTP-Server sein, muss man aber auch erstmal rauslesen. Aber dir ist schon klar, dass man die Abfrage in deinem Programm recht leicht umbiegen kann? |
Re: Abfrage
Also die Datei Via Ftp zu bekommen ist kein Problem, meinProblem ist eben den Inhalt zu vergleichen ohne die Datei zu downloaden.
Soll eben erst Benutzer (datei, sprich ist der dateiname), wenn falsch dann Fehler meldung, wenn richtig dann weiter, passwort (inhalt der datei), falsch dann fehler meldung, wenn richtig dann weiter... :wall: [Edit] ist nur fürs Netzwerk, ist ja nix wichtiges :) [/Edit] |
Re: Abfrage
Hole dir den Verzeichnisinhalt und gehe dann dier Liste durch
|
Re: Abfrage
Ne, ich brauch ein Programm was das erledigt ^^
|
Re: Abfrage
Dann schreib dir eines oder soll das hier ein Jobangebot sein?
|
Re: Abfrage
Wenn ich es net hinbekomme und wissen möchte wie ich eine Datei OHNE download auslesen lassen kann bzw vergleichen kann mit einem textfeld ...
|
Re: Abfrage
Die Datei liegt auf einem FTP-Server und Du willst die ohne Download auslesen? Wenn Du das schaffst, wäre ich am Quellcode interessiert :mrgreen:
|
Re: Abfrage
Den Inhalt kannst du ohne Download nicht einsehen. Für den dateinamen sollte es reichen dir eine Dateiliste vom FTP-Server zu holen
|
Re: Abfrage
ups, also ohne download meinte ich das die datei nicht zu finden ist dann aufm dem computer ...
|
Re: Abfrage
Du musst die Datei herunterladen, sonst kannst du nicht deren Inhalt nutzen. Via FTP kann man die Datei AFAIK nicht nur im Arbeitsspeicher benutzen, sondern muss diese wirklich herunterladen. Das kann aber ja im Verzeichnis für temporäre Dateien passieren und die kann ja sofort wieder gelöscht werden.
|
Re: Abfrage
Zitat:
|
Re: Abfrage
Dann lad sie in den RAM? Wobei man sie auch dort auslesen kann.
|
Re: Abfrage
kann mir wer ein code beispiel zeigen?
bitte |
Re: Abfrage
Für FTP oder das laden in einen MemoryStream?
|
Re: Abfrage
Also ich kenne keine FTP-Funktion um eine Datei ohne Zwischenspeicherung auszulesen, weder bei Indy noch per API. Man könnte höchstens den Befehl selbst schicken und dann das Ergebnis selbst auswerten. Aber
![]() Am besten nimm Indy und TIdFTP, lade die Datei ins Verzeichnis für temporäre Dateien, werte sie aus und lösche sie sofort wieder. Die Auswertung geht schnell und sicher ist das Verfahren ja ohnehin nicht, deshalb ist das ja egal, dass die Datei kurz dort zu finden ist. |
Re: Abfrage
Was ich schon hab ist eben das:
Delphi-Quellcode:
und jetzt möcht ich das überprüfen lassen wie ich es schonmal geschieben hab und die datei mit dem passwort kann gedownloadet werden, sollte aber wieder direkt gelöscht werden. Wie gesagt es ist nur im netzwerk ...
function getfile(server, username, password, localfile, remotefile: string; port: word = 21): boolean;
var hopen, hconnect: HINTERNET; begin hopen := InternetOpen('myagent', INTERNET_OPEN_TYPE_DIRECT, nil, nil, 0); hconnect := InternetConnect(hopen, pchar(server), port, pchar(username), pchar(password), INTERNET_SERVICE_FTP, INTERNET_FLAG_PASSIVE, 0); Result := FtpGetFile(hconnect, pchar(localfile), pchar(remotefile), false, 0, FTP_TRANSFER_TYPE_UNKNOWN, 0); InternetCloseHandle(hconnect); end; |
Re: Abfrage
So machst du es dir unnötig schwer, denn Indy und TIdFTP ist da sehr viel einfacher. Aber gut.
Der Rückgabewert sollte dir anzeigen, ob die Datei erfolgreich gefunden und heruntergeladen werden konnte. Wenn ja, dann kannst du jetzt die lokale Datei öffnen und auslesen:
Delphi-Quellcode:
Wobei YourPassword das zu prüfende Passwort, YourFileName die lokale heruntergeladene Datei und PasswordMatches die Variable für das Ergebnis des Passwortvergleichs ist.
var
MyFile: TStringList; PasswordMatches: Boolean; begin MyFile := TStringList.Create; try MyFile.LoadFromFile(YourFileName); PasswordMatches := Trim(MyFile.Text) = YourPassword; finally MyFile.Free; end; end; |
Re: Abfrage
Wobei du die Datei mit idFtp.Get() gleich in einen MemoryStream laden kannst und so keine lokale datei geschriben wird.
|
Re: Abfrage
Stimmt, da war ich irgendwie blind, ich hatte genau danach geschaut und das nicht gefunden. :gruebel:
Delphi-Quellcode:
procedure TIdFTP.Get(const ASourceFile: string; ADest: TStream; AResume: Boolean = False);
|
Re: Abfrage
Ich versteh die Welt nicht mehr ...
Hier Mein Code...
Delphi-Quellcode:
und
unit Chat1;
interface uses Windows, WinInet, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, jpeg, ExtCtrls, StdCtrls, Login; type TForm1 = class(TForm) Image1: TImage; Button1: TButton; Frame11: TFrame1; procedure Button1Click(Sender: TObject); procedure Frame11CancelBtnClick(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.dfm} function putfile(server, username, password, localfile, remotefile: string; port: word = 21): boolean; var hopen, hconnect: HINTERNET; begin hopen := InternetOpen('myagent', INTERNET_OPEN_TYPE_DIRECT, nil, nil, 0); hconnect := InternetConnect(hopen, pchar(server), port, pchar(username), pchar(password), INTERNET_SERVICE_FTP, INTERNET_FLAG_PASSIVE, 0); Result := FtpPutFile(hconnect, pchar(localfile), pchar(remotefile), FTP_TRANSFER_TYPE_UNKNOWN, 0); InternetCloseHandle(hconnect); end; function getfile(server, username, password, localfile, remotefile: string; port: word = 21): boolean; var hopen, hconnect: HINTERNET; begin hopen := InternetOpen('myagent', INTERNET_OPEN_TYPE_DIRECT, nil, nil, 0); hconnect := InternetConnect(hopen, pchar(server), port, pchar(username), pchar(password), INTERNET_SERVICE_FTP, INTERNET_FLAG_PASSIVE, 0); Result := FtpGetFile(hconnect, pchar(localfile), pchar(remotefile), false, 0, FTP_TRANSFER_TYPE_UNKNOWN, 0); InternetCloseHandle(hconnect); end; procedure TForm1.Button1Click(Sender: TObject); begin Frame11.Show; Button1.Hide; end; procedure TForm1.Frame11CancelBtnClick(Sender: TObject); begin ShowMessage('...wird beendet.'); close; end; end.
Delphi-Quellcode:
unit Login;
interface uses Windows, WinInet, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TFrame1 = class(TFrame) Label1: TLabel; Password: TEdit; OKBtn: TButton; CancelBtn: TButton; Label2: TLabel; Edit1: TEdit; procedure OKBtnClick(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; implementation {$R *.dfm} function putfile(server, username, password, localfile, remotefile: string; port: word = 21): boolean; var hopen, hconnect: HINTERNET; begin hopen := InternetOpen('myagent', INTERNET_OPEN_TYPE_DIRECT, nil, nil, 0); hconnect := InternetConnect(hopen, pchar(server), port, pchar(username), pchar(password), INTERNET_SERVICE_FTP, INTERNET_FLAG_PASSIVE, 0); Result := FtpPutFile(hconnect, pchar(localfile), pchar(remotefile), FTP_TRANSFER_TYPE_UNKNOWN, 0); InternetCloseHandle(hconnect); end; function getfile(server, username, password, localfile, remotefile: string; port: word = 21): boolean; var hopen, hconnect: HINTERNET; begin hopen := InternetOpen('myagent', INTERNET_OPEN_TYPE_DIRECT, nil, nil, 0); hconnect := InternetConnect(hopen, pchar(server), port, pchar(username), pchar(password), INTERNET_SERVICE_FTP, INTERNET_FLAG_PASSIVE, 0); Result := FtpGetFile(hconnect, pchar(localfile), pchar(remotefile), false, 0, FTP_TRANSFER_TYPE_UNKNOWN, 0); InternetCloseHandle(hconnect); end; procedure TFrame1.OKBtnClick(Sender: TObject); var Datei: TextFile; MyFile: TStringList; PasswordMatches: Boolean; begin getfile('ip', 'benutzer', 'pw', 'verzeichniss' + Edit1.Text + '.txt', Edit1.Text + '.txt'); MyFile := TStringList.Create; try MyFile.LoadFromFile(Edit1.text + '.txt'); PasswordMatches := Trim(MyFile.text) = 'Edit2.text'; finally MyFile.Free; end; end; end. |
Re: Abfrage
Du ignorierst den Rückgabewert von getfile...
Delphi-Quellcode:
Aber ich lese da gerade "unit Chat1"?!? Willst du so einen Chat machen? :pale: :shock: Das ist hoffentlich nicht dein Ernst...
if getfile(...) then
... Jedenfalls würdest du dir das Leben wie gesagt leichter machen, wenn du einfach die Indy Komponenten und TIdFtp benutzen würdest. Dann brauchst du dich nicht mit den komplizierteren Befehlen InternetOpen, FtpGetFile, ... herumschlagen, die du im Moment kopiert hast benutzt... |
Re: Abfrage
Nein, es soll kein Chat sein. Es soll mehr eine art wie soll ich es nennen...zwischenspeicher sein.
Danke fürn Befehl: [quote="jaenicke"]
Delphi-Quellcode:
if getfile(...) then
... Wer morgen mal weiter probieren... gn8 |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:50 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