Download Ftp-server



  • Moin,
    ich würde gerne eine Datei von einem Ftp-Server downloaden also das in meinem Programm implementieren. Gibt es hier eine Funktion, die das direkt erledigt z.B wie PutFile zum Hochladen? Oder muss ich CInternetFile::Read und CInternetFile::Write. verwenden?



  • Was hälst Du von CFtpConnection?

    http://msdn.microsoft.com/en-us/library/2kywsafk(VS.80).aspx

    Sollte dir doch weiter helfen

    Gruß



  • Nichts für ungut. Aber die Klasse kenne ich auch, siehe mein letzer Beitrag. Nur habe ich nichts gefunden, um eine Datei direkt runterzuladen. Wäre deshalb froh, wenn mir jemand helfen könnte!



  • CFtpConnection::GetFile



  • Moin, habe mir die Hlfe durchgelesen. Da steht leider kein Beispiel. kann mir jemand vieleicht ein ein einfaches Beispiel geben oder sagen wo solches finde. Gegoogelt habe ich schon.



  • wulfgang schrieb:

    Moin, habe mir die Hlfe durchgelesen.

    Wirklich?

    MSDN schrieb:

    MFC Library Reference
    CInternetSession::CInternetSession
    ...
    Example:
    See the example for CFtpFileFind.

    http://msdn.microsoft.com/en-us/library/272ce2aa(VS.80).aspx



  • @connan:

    ich glaube das problem dabei is, dass das Beispiel nicht genau CFtpConnection::GetFile Beschreibt 😉

    Gruß





  • Morgen, der Link hat schon sehr geholfen. Leider funktioniert das noch nicht so ganz. Ich erhalte 4 Warnungen

    warning C4129: 'g' : unrecognized character escape sequence

    warning C4129: 'g' : unrecognized character escape sequenc

    warning C4129: 'C' : unrecognized character escape sequence

    warning C4129: 'T' : unrecognized character escape sequence

    Die Warnungen beziehen sich auf die zeilen mit FindFile und Getfile.
    Können die mein Problem auslösen? Wie kann ich diese beseitigen?

    Während der Ausführung des Programms erhalte ich dann:

    Debug Assertion Failed!
    Program:....
    File:f:\...

    #include "StdAfx.h"
    #include "transfer_textfile.h"
    #include "windows.h"
    #include <iostream>
    #include "Connect.h"
    
    using namespace std;
    
    transfer_textfile::transfer_textfile(void)
    {
    	Connect();
    	CFtpConnection* connection_pointer;
    	connection_pointer=Connect::getLastConnection();
    	CFtpFileFind finder(connection_pointer);
    	try
    	{
    		BOOL bWorking = finder.FindFile(_T("server\ordner\ordner\bu.txt")); //Hier Warnungen
    		if(bWorking)
    			{ 
    
    				BOOL bGot = connection_pointer->GetFile(_T("ordner\ordner\ordner\bu.txt"),_T("C:\ordner\TxtTransfer")); //Hier Warnungen
    			}
    			else
    					{
    						//something wrong with the file.. inform the user
    
    						cout << "The File specified could not be found.!";
    					}
    	}
    	catch(CException* error)
        {
            TCHAR szCause[1024];
    		error->GetErrorMessage(szCause,1024);
            //sCause.Format("%s",szCause);
        }
    
    }
    


  • Du musst die "\" escapen!

    z.B.:

    aus ordner\ordner\ordner\bu.txt
    wird
    ordner\\ordner\\ordner\\bu.txt



  • Du musst die "\" escapen!

    Habe ich gemacht. Die Warnungen sind auch verschwunden. Nur der Fehler während der Ausführung taucht immer noch auf.

    Debug Assertion Failed!
    Prgram: ...
    File: f:\rtm\vctools\vc7libs\ship\atlmfc\src\mfc\inet.cp p
    Line: 1768

    In der Umgebung von 1768 steht:

    void CFtpConnection::AssertValid() const
    {	
                 ASSERT(m_pSession != NULL);
    	if (m_hConnection != NULL)       //Zeile 1768
    	{
    		ASSERT(AfxGetInternetHandleType(m_hConnection)
    				== INTERNET_HANDLE_TYPE_CONNECT_FTP);
    	}
    }
    


  • Du hast kein Handel, ist deine Funktion getLastConnection() wirklich ne statische der Klasse? Denn diese scheint dir nicht das richtige zurückzugeben.

    Gruß



  • Du hast kein Handel, ist deine Funktion getLastConnection() wirklich ne statische der Klasse? Denn diese scheint dir nicht das richtige zurückzugeben

    Ich bin ehrlich gesagt kein Experte in so was aber:
    In meiner Connect.h:

    #pragma once
    #include <afx.h>
    #include <afxwin.h>
    #include <afxinet.h>
    #include <stdio.h>
    class Connect
    {
    public:
    	Connect(void);
    	static CFtpConnection * Connect::getLastConnection(); 
    	static CFtpConnection *connection_pointer;
    public:
    	~Connect(void);
    };
    

    Connect.cpp:

    CFtpConnection* Connect::connection_pointer=NULL;
    Connect::Connect(void)
    {
    ....		
    	try
    	{
    
    	//FTP-Verbindung wird eröffnet,Methode GetFtpConnection wird auf session angewandt, 
        //connection wird auf zurückgegeben Zeiger gesetzt
    if(connection = session.GetFtpConnection(pstrServer, login, passwd, port, bPassive)) 
    			{
    			cout << "Verbindung wurde aufgebaut\n";     
    			connection_pointer=connection; 
    			}
    
    	}
    	//Fehleroutine
    	catch (CInternetException* pEx)
        {
    		cout<<"FEHLER : "<<GetLastError()<<endl;
            TCHAR sz[1024];
            pEx->GetErrorMessage(sz, 1024);
            printf_s("ERROR!  %S\n", sz);
            pEx->Delete();
         }
    
    	cout << "Test Konstruktor von Connect erfolgreich\n"; 
    
    }
    
    Connect::~Connect(void)
    {
    }
    
    CFtpConnection * Connect::getLastConnection() 
    { 
    	return connection_pointer; 
    }
    


  • Wirst du wohl mal mit dem debuger durchgehen müssen und schauen ob du den CFtpConnection Pointer auch bekommst (also ob der gültug is).

    Gruß



  • Wirst du wohl mal mit dem debuger durchgehen müssen und schauen ob du den CFtpConnection Pointer auch bekommst (also ob der gültug is).

    😕
    Wie stelle ich das den konkret an?


Anmelden zum Antworten