Problem mit FTPGetCurrentDirectory



  • Hi!
    Immer wenn ich die Funktion aufrufe kommt False als Rückgabewert zurück.Ich ahbe keine Ahnung wieso.guckt euch mal den Quelltext an:

    #include <windows.h>
    #include <iostream>
    #include <wininet.h>
    using namespace std;
    
    int main()
    {
    	char buf[MAX_PATH];
    	DWORD bufLength = 1024;
    	HINTERNET hInternet, hFtpInt;
    
    	hInternet = InternetOpen("FTP", INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, INTERNET_FLAG_ASYNC);
    
    	if(hInternet == NULL)
    	{
    		cout << "Es konnte keine Internetsitzung gestartet werden" << endl;
    	} else {
    		cout << "Internetsitzung wurde gestartet" << endl;
    	};
    
    	hFtpInt = InternetConnect(hInternet, "home.arcor.de", INTERNET_DEFAULT_FTP_PORT, "marius-frank", "windows", INTERNET_SERVICE_FTP, 0,0);
    
    	if(hFtpInt == NULL)
    	{
    		cout << "Verbindung zum Server konnte nicht hergestellt werden " << endl;
    	} else {
    		cout << "Verbindung zum Server wurde hergestellt" << endl;
    	};
    
    	if(!FtpGetCurrentDirectory(hFtpInt, buf, &bufLength ))
    	{
    		cout << "Verzeichnis konnte nicht angezeigt werden" << endl;
    	} else {
    		cout << "Verzeichnis wurde angezeigt" << endl;
    	};
    
    	return 0;
    };
    


  • Keiner ne Idee woran das liegt?Wenn ich "buf" dann in der Konsole ausgeben kommen nur lauter kryptische Zeichen...



  • du solltest auch die richtige größe von deinem buffer übergeben
    bsp:

    DWORD bufLength = MAX_PATH;
    // oder
    DWORD bufLength = sizeof(buf);
    

    ps: gehört ins winapi forum



  • Es funktioniert trotzdem nicht...



  • die verbindung zum server steht ? evtl. passiver modus ?

    void GetServerResponse()
    {
    	DWORD dwInfo;
    	DWORD dwLength;
    	char *pszResponse = NULL;
    
    	InternetGetLastResponseInfo(&dwInfo, NULL, &dwLength);
    	if(dwLength)
    	{
    		if((pszResponse = (char *)LocalAlloc(LPTR, dwLength)))
    			if(InternetGetLastResponseInfo(&dwInfo, (LPTSTR)pszResponse, &dwLength))
    			{
                                   cout << pszResponse << endl;			}
    			else
    			   cout << "Fehler: " << GetLastError() << endl;
    	}
    	else
    	   cout << "Fehler: " << GetLastError() << endl;
    
    	LocalFree(pszResponse);
    }
    

    benutz mal diese funktion nach dem connecten



  • Steht User marius-frank logged in



  • steht bei mir auch. 😉

    if((hInternet = InternetOpen(
    			"ftpclient",
    			INTERNET_OPEN_TYPE_DIRECT,
    			NULL,
    			NULL,
    			0)) == NULL)
    		return;
    
    	if((hFtpSession = InternetConnect(
    			hInternet,
    			"home.arcor.de",
    			INTERNET_DEFAULT_FTP_PORT,
    			"marius-frank",
    			"windows",
    			INTERNET_SERVICE_FTP,
    			INTERNET_FLAG_PASSIVE,
    			0)) == NULL)
    		return;
    
             char szFtpDir[MAX_PATH];
    	DWORD dwSize = MAX_PATH;
    
    	GetServerResponse();
    	FtpGetCurrentDirectory(hFtpSession, szFtpDir, &dwSize);
    	GetServerResponse();
    


  • Wenn ich die Funktion nach dem Verzeichnis holen ausführe kommt Fehler: 997



  • Ich habe jetzt bei der Funktion InternetOpen mal deine Parameter verwendet und jetzt funktioniert es!Was bewirkten die Änderungen denn?Ich habe die Parameter aus dem Petzold übernommen.
    Vielen dank für deine Hilfe.

    PS:Kennst du irgend eine Seiten wo einem das ganze etwas näher erklärt wird?Im Petzold ist das ganze ja ziemlich knapp behandelt und ich will ja auch verstehen, was ich da genau mache




Anmelden zum Antworten