AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Projekte nonVCL-FTP-Client
Thema durchsuchen
Ansicht
Themen-Optionen

nonVCL-FTP-Client

Ein Thema von Luckie · begonnen am 21. Jun 2002 · letzter Beitrag vom 3. Jul 2003
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Luckie
Luckie
Registriert seit: 29. Mai 2002
Nein, ich bin nicht wahnsinnig. Das ist nur eine Studie.

Wie gesagt es handelt sich um einen sehr einfachen FTP-Client, realisiert nur mit der Windows-API. Und soll nur eine kleine Studie sein, dass es auch ohne geht

Ich erwarte nicht, dass da jemand ernsthaft mit arbeitet. Wenn es doch jemand schaffen sollte eine, sagen wir, 75 Seiten umfasssende Internetseite mit mehreren Unterverzeichnissen in mehreren Ebenen hochzuladen und zum Laufen zu bringen, dem gebe ich einen aus.
Kleiner Tipp: Wer damit wirklich was hochladen will, sollte sich auf dem Server auskennen und eventuell eine Verzeichnisstruktur samt Dateien neben sich auf dem Schreibtisch liegen haben .

Link: nonVCL-FTP-Client

Anmerkung: Das mit ermitteln des aktuellen Verzeichnisses habe ich noch nicht hinbekommen, aber wenn jemand Lust hat, die Sourcen sind, wie immer bei mir, dabei.
Ein Teil meines Codes würde euch verunsichern.
 
Benutzerbild von d3g
d3g
 
#2
  Alt 22. Jun 2002, 18:53
Hi Luckie,

schöner Client

Ich habe dein Problem mit dem verzeichnis übrigens gelöst: lenDir ist bei dir IMMER 0, weil FtpGetCurrentDirectory immer nur so viele Zeichen kopiert, wie das letzte Flag angibt (und dann den Wert so äbändert, dass die wirklich kopierten Ziechen drinstehen). So musst du also lenDir nicht mit 0, sondern mit MAX_PATH initialisieren:

Code:
procedure GetCurDir(handle: Cardinal);
var
  szBuffer: array[0..255] of Char;
  szDir: PChar;
  lenDir: DWORD;
begin
  lenDir := MAX_PATH;
  FTPGetCurrentDirectory(hFTPSession, nil, lenDir);
  GetMem(szDir, lenDir);
  FTPGetCurrentDirectory(hFTPSession, szDir, lenDir);
  lstrcpy(szBuffer, 'aktuelles Verzeichnis: ');
  lstrcat(szBuffer, szDir);
  SendMessage(GetDlgItem(handle, IDC_LSTMSG), LB_ADDSTRING, 0, Integer(@szBuffer));
  FreeMem(szDir);
end;
MfG,
d3g
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

 
Delphi 2006 Professional
 
#3
  Alt 22. Jun 2002, 19:21
Hallo d3g,
danke für deine Mühe, aber hast du den Code mal ausprobiert? Bei mir knallt das ganz gewaltig. Ich bekomme eine Zugriffsverletzung und bekomme das CPU-Fenster zu sehen.
Michael
  Mit Zitat antworten Zitat
Benutzerbild von d3g
d3g
 
#4
  Alt 22. Jun 2002, 20:00
Hi Luckie,

latürnich habe ich den Code ausprobiert, allerdings im Step-by-Step-Verfahren (F8-Taste) - da knallts nämlich nicht. Wenn ich das Prog so ausführe, allerdings doch

Das ist ja toll: sobald man debuggen will funzts und wenn nicht, dann knallts...

MfG,
d3g
  Mit Zitat antworten Zitat
jbg

 
Delphi 10.1 Berlin Professional
 
#5
  Alt 23. Jun 2002, 10:37
Da stimmt irgendetwas nicht mit FtpGetCurrentDirectory. Es liefert den Fehler ERROR_IO_PENDING = 'Überlappende E/A Operation'
Andreas aka AHUser aka jbg
  Mit Zitat antworten Zitat
Benutzerbild von d3g
d3g
 
#6
  Alt 23. Jun 2002, 11:15
Hi Leute,

der Fehler kommt wohl davon, dass FtpGetCurrentDirecory immer MAX_PATH Zeichen zurürckgibt und dass das die Größe von szBuffer überschreitet. Deshalb habe ich den Code so abgeändert:

Code:
procedure GetCurDir(handle: Cardinal);
const
  LEN_CUR_DIR = 23; // Length('aktuelles Verzeichnis: ')
var
  szBuffer: array[0..MAX_PATH - 1 + LEN_CUR_DIR] of Char;
  szDir: PChar;
  lenDir: DWORD;
begin
  lenDir := MAX_PATH;
  GetMem(szDir, lenDir);
  FTPGetCurrentDirectory(hFTPSession, szDir, lenDir);
//  MessageBox(0, szDir, 'GetCurDir', 64);
  lstrcpy(szBuffer, 'aktuelles Verzeichnis: ');
  lstrcat(szBuffer, szDir);
  SendMessage(GetDlgItem(handle, IDC_LSTMSG), LB_ADDSTRING, 0, Integer(@szBuffer));
  FreeMem(szDir);
end;
Jetzt aber ist szDir = ''. Nur wenn man vorher im Debug-Modus sich szDir ansieht, oder die MessageBox oben einbaut, dann erhlält man zwar zuerst szDir='', aber dann einen Befehl später den Verzeichnisort...

MfG,
d3g
  Mit Zitat antworten Zitat
jbg

 
Delphi 10.1 Berlin Professional
 
#7
  Alt 23. Jun 2002, 12:38
Baue doch mal dein ProcessMessages vor das FtpGetCurrentDirectory. Denn MessageBox arbeitet auch die Botschaftskette ab.
Andreas aka AHUser aka jbg
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

 
Delphi 2006 Professional
 
#8
  Alt 23. Jun 2002, 13:03
Hm, muß ich mir noch mal ankucken.
Also wenn ich nur die Messagebox anzeigen lasse, ist die immer leer. Mache ich LB_ADDSTRING kracht es wieder.

Jetzt aber Formel1 Start.
Michael
  Mit Zitat antworten Zitat
jbg

 
Delphi 10.1 Berlin Professional
 
#9
  Alt 23. Jun 2002, 14:42
Ich glaube ich hab den Fehler. Du übergibst bei InternetOpen das Flag INTERNET_FLAG_ASYNC, was soviel heißt, dass du eine Anforderung schickst, diese aber nicht gleich zurückgeliefert haben willst. Somit kehrt FtpGetCurrentDirectory sofort zurück und hat nichts verändert, merkt sich aber die Speicheradresse, wo das Resultat, der Verzeichnisname, hingeschrieben werden soll. Dein Programm gibt diesen Speicherbereich jedoch wieder frei, wenn FtpGetCurrentDirectory zurückgekehrt ist, und deswegen versucht die WinInet Funktion in einen nicht mehr gültigen Speicherbereich zu schreiben, wenn der Request vom Server beantwortet ist.

Als Lösung kannst du einfach das Flag INTERNET_FLAG_ASYNC beim Aufruf von InternetOpen weg lassen. Dann funktioniert es. Hab es ausprobiert.
Andreas aka AHUser aka jbg
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

 
Delphi 2006 Professional
 
#10
  Alt 23. Jun 2002, 14:55
Aaaaaah, ihr seit zum knuddeln Jungs. Danke. Vielen Dank.

Jetzt werde ich noch kucken, ob ich ein Verzeichnislisting hin bekomme und dann kann man mit dem teil schon fast arbeiten.

Aber erst mal sollte ich abwaschen. Aber leider keine Spülmaschine, also muß das auch irgendwie "nonVCL" gehen, so zu sagen.
Michael
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:45 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz