FTP Upload einer Datei mit Umgebungsvariable oder *char -> String ?



  • Hallo ich habe folgendes Problem :

    Hier ein Auszug des Uploadscripts :

    if (FtpPutFile(hFtpSession, url, "ziel.txt", FTP_TRANSFER_TYPE_ASCII, 0) == TRUE) ...
    

    Statt "url" würde ich gerne folgenden Pfad haben :

    C:\Users\<Name>\datei.txt

    Ich habe einen String der diesen Pfad ausspuckt aber wenn ich nun den String in Char umwandel :

    char *url=const_cast<char*>(Dateipfad.c_str());
    

    bekomme ich immer den Fehler 320

    Kann mir jemand dazu helfen ?

    😕 😕



  • Warum castest du denn auf char*? oO
    Wie sieht denn dein Pfad aus? So? "C:\\Users\\Name\\datei.txt"



  • Nun ja , passwort usw läuft ja auch über das gleiche Muster

    char *user="..." ;
    
    ...
    
    hFtpSession = InternetConnect(hInternet.... user, pass, .... ;
    

    und da gehe ich von aus, dass das auch mit dem Pfad so laufen sollte..

    Habe Testweise einfach mal den String eingesetzt und bekomme nun

    main.cpp:89:87: Fehler: »std::string {aka std::basic_string<char>}« kann nicht n
    ach »LPCSTR {aka const char*}« für Argument »2« nach »BOOL FtpPutFileA(HINTERNET
    , LPCSTR, LPCSTR, DWORD, DWORD)« umgewandelt werden



  • zum Verständnis im Ganzen :

    char *xdat=DateipfadZuFile ;  // Anfangs : const_cas...  Im Grunde wird ein String übergeben
        char *userftp="...";
        char *passftp="...";
        char *ftpserver="...de";
        HINTERNET hInternet;
        HINTERNET hFtpSession;
        hInternet = InternetOpen(NULL,INTERNET_OPEN_TYPE_DIRECT,NULL,NULL,0);
        hFtpSession = InternetConnect(hInternet,ftpserver , INTERNET_DEFAULT_FTP_PORT, userftp, passftp, INTERNET_SERVICE_FTP, 0, 0);
        if(FtpPutFile(hFtpSession, DateipfadZuFile, "file.txt", FTP_TRANSFER_TYPE_ASCII, 0) == TRUE){
            cout << "File Sent! " << endl;
            Sleep(1000);
            InternetCloseHandle(hFtpSession);
            InternetCloseHandle(hInternet);
    
        }
        else{
            cout << "File error " << endl;
            cout<<"Error: "<<GetLastError();
    
        }
    

    Dateipfad : C:\\User\..



  • Wieso castest du überhaupt nach char*? Nimm doch einfach char const*, das geht ja auch...



  • Danke 🙂

    Gibt zwar keinen Fehler.. sendet aber auch nicht
    Fehler 32 (wohl 320 , was vermutlich am falschen pfad liegt)

    Dieser generiert sich wiefolgt :

    ...
    string user = GetUserName(user_name, &nSize)
    string Dateipfad = "C:\\Users\\" + user + "\\datei.txt" ;

    cout würde auch den richtigen ausgeben.. also C:\Users\...



  • std::string xdat=DateipfadZuFile; // xdat???
        std::string remoteFilename="...";
        std::string userftp="...";
        std::string passftp="...";
        std::string ftpserver="...de";
    // ...
        hFtpSession = InternetConnect(hInternet, ftpserver.c_str(), INTERNET_DEFAULT_FTP_PORT, userftp.c_str(), passftp.c_str(), INTERNET_SERVICE_FTP, 0, 0);
        if(FtpPutFile(hFtpSession, xdat.c_str(), remoteFilename.c_str(), FTP_TRANSFER_TYPE_ASCII, 0) == TRUE) {
    // ...
    

    ?



  • ist ja egal wie man es nennt 🙂

    if(FtpPutFile(hFtpSession, xdat.c_str(),

    oder url..

    mom ich versuchs mal :=)



  • DWORD nSize;
        char user_name[255];  
        nSize = sizeof( user_name ); 
        GetUserName( user_name, &nSize ); 
        string user = user_name;
        string Dateipfad = "C:\\Users\\" + user + "\\Documents\\"  ; 
        string File1 = "test.txt" ;
        string DateipfadZuFile = Dateipfad + File1 ;
    
        int i=0;   
    
        std::string xdat = DateipfadZuFile;
        char *userftp="..";
        char *passftp="..";
        char *ftpserver="..de";
        HINTERNET hInternet;
        HINTERNET hFtpSession;
        hInternet = InternetOpen(NULL,INTERNET_OPEN_TYPE_DIRECT,NULL,NULL,0);
        hFtpSession = InternetConnect(hInternet,ftpserver , INTERNET_DEFAULT_FTP_PORT, userftp, passftp, INTERNET_SERVICE_FTP, 0, 0);
        if(FtpPutFile(hFtpSession, xdat.c_str() , "file.txt", FTP_TRANSFER_TYPE_ASCII, 0) == TRUE){
            cout << "File Sent! " << endl;
            Sleep(1000);
            InternetCloseHandle(hFtpSession);
            InternetCloseHandle(hInternet);
    
        }
        else{
            cout << "File didnt send " << endl;
            cout<<"Error: "<<GetLastError(); // bekomme hier Error: 32
    
        }
    

    Das ist mein aktueller Code.. mit Anpassung



  • Du kannst doch einfach ne Library wie Curl nutzen, dann hast du Funktionen, die funzen und ne gute fehlerausgabe 🙂


Anmelden zum Antworten