[WinApi - WININET] FtpGetFile() funktioniert nicht - FTP-Verbindung besteht jedoch

radazong

Mitglied
Hallo Community,

Ich habe folgendes Problem und komme allein absolut nicht weiter :

Undzwar möchte ich mit meinem Programm eine Verbindung zu einem FTP-Server aufbauen, und eine dort hinterlegte Statusdatei abfragen. Die FTP-Verbindung zum Server wird definitiv aufgebaut, was ich daran gesehen habe, dass der entsprechende Benutzer angemeldet war. Jedoch kann ich die Datei weder mit FtpGetFile() runterladen, noch mit FtpOpenFile()&InternetReadFile() direkt lesen.

In dem FTP-Verzeichnis befindet sich nur diese eine Datei. Keine Unterverzeichnisse, etc. Der Server ist ein Proftpd-Server, der Zugriff erfolgt über einen Wind**f-Rechner.

Hier mein Sourcecode für den FTP-Zugriff:

C++:
int ConnectionStatus(TCHAR* server,int port)
{
	HINTERNET hInternet,hFtp,hFtpRead,hFtpOpen;
	WIN32_FIND_DATA wfd={0};
	TCHAR Buffer[100]={0};

	hInternet=InternetOpen(L"ftp-client",INTERNET_OPEN_TYPE_PRECONFIG,0,0,INTERNET_FLAG_ASYNC);
	if(!hInternet)
		return INTERNET_FAULT;

	hFtp=InternetConnect(hInternet,server,port,user,password,INTERNET_SERVICE_FTP,0,0);
	if(!hFtp)
	{
		InternetCloseHandle(hInternet);
		return SERVER_FAULT;
	}

	if(FALSE==FtpGetFile(hFtp,L"status.txt",L"c:/windows/temp/status.txt",TRUE,FILE_ATTRIBUTE_NORMAL,FTP_TRANSFER_TYPE_UNKNOWN,0))
	MessageBox(0,L"Fehler",L"Status",MB_OK);
	

	InternetCloseHandle(hFtp);
	InternetCloseHandle(hInternet);

return NOT_IN_USE;

}

Ich hoffe, irgendjemand kann mir dabei helfen. Habe das Gefühl, das es nur noch ein winziges Detail zum Erfolg ist :).

Greetz,
RadAZonG
 
Zuletzt bearbeitet von einem Moderator:
Hmm,

bin mir nicht sicher aber geht "/" ich benutze immer "\\".

Der Rest sieht richtig aus.

Gruß
Anfänger.

Edit:
Außerdem würde ich gucken ob der Ordner exsistiert und falls du Vista benutzt solltest du das ganze in nem anderen Verzeichnis (z.B. Desktop) speichern oder als Administrator ausführen.
 
Zuletzt bearbeitet:
Hi,

Also, zumindest bei Dateioperationen funktioniert '/' bei mir. '\\' brachte leider auch keine Besserung. Der Temp Ordner existiert, in dem sind auch sämtliche Configs der Anwendung gespeichert.
Auch ein Ausführen als Administrator brachte leider nichts. System ist übrigens Vista.
 
Hi.

Anstatt nur wild rumzuraten und irgendwie trail-and-error zu probieren, würde ich ja mal die Fehlercodes untersuchen was denn evtl. der Grund für das Fehlschlagen der Funktionsaufrufe ist.

Gruß
 
Hallo,
da hast du natürlich recht. Nachdem ich mit dem Fehlercode von GetLastError() nicht soviel anfangen konnte, habe ich mit der Funktion InternetGetLastResponseInfo() mehrere unbekannte COMMANDS angezeigt bekommen. Dadurch bin ich mal auf die Idee gekommen, das ganze als passive Verbindung zu starten - und, oh Wunder, es funktionierte endlich.

hFtp=InternetConnect(hInternet,server,port,user,password,INTERNET_SERVICE_FTP,INTERNET_FLAG_PASSIVE,0);

Manchmal braucht man eben ein paar Denkanstöße um die Zahnräder wieder zum Drehen zu bringen :). Ich Danke für die Antworten, und den Tipp der mich letztlich zum Erfolg geführt hat.

Gruß,
RadAzonG
 

Neue Beiträge

Zurück