Auflisten der Dateien in einem Verzeichnis per FTP
-
Hallo zusammen, kann mir einer sagen wie es möglich ist alle Datei im Verzeichnis eines FTP Server auzulisten, Auflistung wie z.B. bei dem Befehl "dir". Habe was gelesen das es mit FtpCommand, FtpFindFirstFile oder FtpGetCurrentDirectory geht, weiss allerdings nicht wie ich das anstellen soll. Bin dankbar für jede hilfe!
#include <windows.h> #include <wininet.h> #include <iostream> #include <string> using namespace std; HINTERNET hInetOpen, hInetConnect; char user[50]; char pass[50]; char host[50]; int main() { cout << "Host: "; cin >> host; cout << "Username: "; cin >> user; cout << "Password: "; cin >> pass; hInetOpen = InternetOpen("Inet",INTERNET_OPEN_TYPE_DIRECT, NULL, NULL, 0); cout << "\nVerbinde mit "<<host<<" ..."; hInetConnect = InternetConnect(hInetOpen, host, INTERNET_DEFAULT_FTP_PORT, user, pass, INTERNET_SERVICE_FTP, INTERNET_FLAG_PASSIVE, 0); if((hInetOpen || hInetConnect) == NULL) cout << "\nKeine Verbindung!\n"; else cout << "\nVerbunden mit "<<host; InternetCloseHandle(hInetOpen); InternetCloseHandle(hInetConnect); getchar(); return 0; getchar(); }
-
hi,
habe keinen wirklichen plan, aber versuch doch mal das hier: Dateien in einem Verzeichnis auflisten (FindFirstFile/FindNextFile), wobei du anstatt FindFirstFile() und FindNextFile() einfach FtpFindFirstFile() und FtpFindNextFile() benutzt.lw
-
Ok das habe ich jetzt hinbekommen nur habe ich jetzt noch ein Problem und zwar wenn ich ich im Aktuellen Verzeichnis (/) binn und alle Dateien und Ordner augegeben wurde und möchte dann ins z.B (developr) Verzeichnis wechseln komme ich nicht so ganz weiter.
Auszug:
FtpGetCurrentDirectory(hInetConnect, CurDir, &CurDirSize); cout << "\nDirectory: "<< CurDir<<endl; hFtpFind = FtpFindFirstFile(hInetConnect, "*.*", &FindData, NULL, NULL); if(hFtpFind == INVALID_HANDLE_VALUE) { printf("Invalid File Handle. Get Last Error reports %d\n", GetLastError()); } if (hFtpFind != INVALID_HANDLE_VALUE) { do { printf("The first file found is %s\n", FindData.cFileName); } while(InternetFindNextFile(hFtpFind, &FindData)); } cout << "Neuer Pfad: "; cin >> path; FtpSetCurrentDirectory(hInetConnect, path); cout << path; FtpGetCurrentDirectory(hInetConnect, CurDir, &CurDirSize); cout << "\nDirectory: "<< CurDir <<endl; hFtpFind = FtpFindFirstFile(hInetConnect, "*.*", &FindData, NULL, NULL); if(hFtpFind == INVALID_HANDLE_VALUE) { printf("Invalid File Handle. Get Last Error reports %d\n", GetLastError()); } if (hFtpFind != INVALID_HANDLE_VALUE) { do { printf("The first file found is %s\n", FindData.cFileName); } while(InternetFindNextFile(hFtpFind, &FindData)); }
-
Für was brauchst du FtpSetCurrentDirectory, du benutzt es beim Hauptverzeichnis ja auch nicht? Probier's mal ohne die Zeile, ist nur so ne Idee :).
cya
-
Ich brauchees, so dachte ich , um den neuen Ofad festzulegen. Der der User eingegeben hat. Danach sol mit FtpGetCurrentDirectory der Name des Verzeichnisses ausgegeben werden, in der man gerade ist. Dann soll wieder jeder Ordner und jede Datei aufgelistet werden die sich im aktuellen Verzeichnis befindet. nur bekomme ich als Ausgabe immmer nur das (/) Root Verzeichnis mit den Daten angezeigt. Wenn ich einen neuen Pfad angeben in dem gewechselt werden soll, immer nur ein Ordner angezeigt den es schon in dem (/) Root Verzeichnis gab. Aufrufen wollte ich das Verzeichnis mit (cd developr).
Ausgabe:
Host: ftp.microsoft.com
Username: Anonymous
Password: asd@asd.comVerbinde mit ftp.microsoft.com
Verbunden mit ftp.microsoft.comDirectory: /
The first file found is bussys
The first file found is deskapps
The first file found is developr
The first file found is KBHelp
The first file found is MISC
The first file found is MISC1
The first file found is peropsys
The first file found is Products
The first file found is PSS
The first file found is ResKit
The first file found is Services
The first file found is Softlib
: cd developr
cd
Directory: /d
The first file found is Softlib
-
du musst jedes Unterverzeichnis in einer eigenen Session abarbeiten:
WinInet Reference : Functions : FtpFindFirstFile
... FtpFindFirstFile is similar to the FindFirstFile function. Note, however, that only one FtpFindFirstFile can occur at a time within a given FTP session. The enumerations, therefore, are correlated with the FTP session handle. This is because the FTP protocol allows only a single directory enumeration per session. ...gruß enigma[code][t]
-
CurDirSize jedesmal nach Aufruf von
FtpGetCurrentDirectory(hInetConnect, CurDir, &CurDirSize);
auf
curDirSize = MAX_PATH;
setzen.MSDN: Pointer to a variable that specifies the length of the buffer, in TCHARs. The buffer length must include room for a terminating null character. Using a length of MAX_PATH is sufficient for all paths. When the function returns, the variable RECEIVES the number of characters copied into the buffer.
gruß enigma