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
