FTP zugriff Fehler Hilfe!
-
Hi ich versuche eine Datei (.txt) von meinen FTP-Server herunterzuladen. Aber ich bekomm einige Fehlermeldung

#include "d:\\Dev-Cpp\\include\\main-header.h" #include <wininet.h> using namespace std; int main() { HINTERNET hSession; hSession = InternetOpen(L"MyApp", INTERNET_OPEN_TYPE_DIRECT, NULL, NULL, 0); HINTERNET hService; hService = InternetConnect(hSession, L"server", INTERNET_DEFAULT_FTP_PORT, L"username", L"password", INTERNET_SERVICE_FTP, 0, 0); FtpGetFile(hService, L"test.txt", L"test.txt", 0, 0, FTP_TRANSFER_TYPE_BINARY, 0); InternetCloseHandle(hService); InternetCloseHandle(hSession); getch(); return 0; }Fehlermeldungen:
1>------ Erstellen gestartet: Projekt: Test, Konfiguration: Debug Win32 ------
1>Kompilieren...
1>main.cpp
1>c:\users\root\documents\visual studio 2008\projects\test\test\main.cpp(18) : warning C4996: 'getch': The POSIX name for this item is deprecated. Instead, use the ISO C++ conformant name: _getch. See online help for details.
1> d:\visual c++\vc\include\conio.h(145): Siehe Deklaration von 'getch'
1>Verknüpfen...
1>main.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "__imp__InternetCloseHandle@4" in Funktion "_main".
1>main.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "__imp__FtpGetFileW@28" in Funktion "_main".
1>main.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "__imp__InternetConnectW@32" in Funktion "_main".
1>main.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "__imp__InternetOpenW@20" in Funktion "_main".
1>C:\Users\ROOT\Documents\Visual Studio 2008\Projects\Test\Debug\Test.exe : fatal error LNK1120: 4 nicht aufgelöste externe Verweise.
1>Das Buildprotokoll wurde unter "file://c:\Users\ROOT\Documents\Visual Studio 2008\Projects\Test\Test\Debug\BuildLog.htm" gespeichert.
1>Test - 5 Fehler, 1 Warnung(en)
========== Erstellen: 0 erfolgreich, Fehler bei 1, 0 aktuell, 0 übersprungen ==========Bin über jede Antwort dankbar!

-
Hast du auch die Wininet.lib gelinkt?
-
@jesus was black Danke jetzt funktionierts!

hab es mit
#pragma comment(lib,"Wininet")gelinkt
Geht das auch anders?
Danke für die Antworten
-
Ja, kannst die lib in den Projekt einstellungen dazu linken. Wofür brauchst den main-header ? Wenn du eswirklich brauchst, besser dass du die datei in dein projekt ordner kopierst.
#include "my-header.h"sieht besser aus als
#include "d:\\Dev-Cpp\\include\\main-header.h"
-
main-header.h ist von mir eine selbst geschriebene Header

Folgendes Problem:
Ich möchte vom Benutzer eine Eingabe entgegennehmen und in einen char server[50]-Array abspeichern und dann im FTP-Zugriff verwenden (Das gleiche noch mit Filename, Username und Password). Die Eingabe wird mit cin.getline(server, 50) entgegengenommen. Aber ich muss den char-Array irgendwie noch in LPCWSTR konvertieren, wie geht das.
Sorry für die lästigen Fragen bin noch Anfänger in der Windowsprogrammierung, programmiere aber schon seit 1-Jahr mit C++Mein Programm bisher:
#include "d:\\Dev-Cpp\\include\\main-header.h" #include <wininet.h> #pragma comment(lib,"Wininet") using namespace std; int main() { char server[50]; cin.getline(server, 50); HINTERNET hSession, hService; hSession = InternetOpen(NULL, INTERNET_OPEN_TYPE_DIRECT, NULL, NULL, 0); hService = InternetConnect(hSession, server, INTERNET_DEFAULT_FTP_PORT, username, password, INTERNET_SERVICE_FTP, 0, 0); FtpGetFile(hService, filename, filename, 0, 0, FTP_TRANSFER_TYPE_ASCII, 0); InternetCloseHandle(hService); InternetCloseHandle(hSession); return 0; }Ich nutze den Visual Studio C++.
Meldungen:
1>------ Erstellen gestartet: Projekt: Test, Konfiguration: Debug Win32 ------
1>Kompilieren...
1>main.cpp
1>c:\users\root\documents\visual studio 2008\projects\test\test\main.cpp(16) : error C2664: 'InternetConnectW': Konvertierung des Parameters 2 von 'char [21]' in 'LPCWSTR' nicht möglich
1> Die Typen, auf die verwiesen wird, sind nicht verknüpft; die Konvertierung erfordert einen reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat.
1>Das Buildprotokoll wurde unter "file://c:\Users\ROOT\Documents\Visual Studio 2008\Projects\Test\Test\Debug\BuildLog.htm" gespeichert.
1>Test - 1 Fehler, 0 Warnung(en)
========== Erstellen: 0 erfolgreich, Fehler bei 1, 0 aktuell, 0 übersprungen ==========Vielen Danke für die bisherigen Antworten und für die kommenden

-
Stell "Character Set" auf "Use Multi-Byte Character Set" in den Projekt einstellungen, dann brauchst du auch nicht den L"..." kram.
-
@jesus was black Vielen Dank für deine Antworten

Hab die Lösung:
#include "d:\\Dev-Cpp\\include\\main-header.h" #include <wininet.h> #pragma comment(lib,"Wininet") #define nl cout << "\n"; using namespace std; int main() { char server[50], username[50], password[50], filename[50]; cout << "server: "; cin.getline(server, 50); nl; cout << "username: "; cin.getline(username, 50); nl; cout << "password: "; cin.getline(password, 50); nl; cout << "filename: "; cin.getline(filename, 50); nl; HINTERNET hSession, hService; hSession = InternetOpen(NULL, INTERNET_OPEN_TYPE_DIRECT, NULL, NULL, 0); hService = InternetConnect(hSession, TEXT(server), INTERNET_DEFAULT_FTP_PORT, TEXT(username), TEXT(password), INTERNET_SERVICE_FTP, 0, 0); FtpGetFile(hService, TEXT(filename), TEXT(filename), 0, 0, FTP_TRANSFER_TYPE_ASCII, 0); InternetCloseHandle(hService); InternetCloseHandle(hSession); return 0; }
-
SDS schrieb:
@jesus was black Vielen Dank für deine Antworten

Hab die Lösung:
#include "d:\\Dev-Cpp\\include\\main-header.h" //änder das doch endlich mal - das sieht hässlich aus - wurde aber auch schon mal gesagt... #include <wininet.h> #pragma comment(lib,"Wininet") #define nl cout << "\n"; //bäh >.< using namespace std; int main() { char server[50], username[50], password[50], filename[50]; //keine gute idee... std::basic_string<_TCHAR> server, username, password, filename; cout << "server: "; std::getline(std::cin, server); std::cout << std::endl; cout << "username: "; std::getline(std::cin, username); std::cout << std::endl; cout << "password: "; std::getline(std::cin, password); std::cout << std::endl; cout << "filename: "; std::getline(std::cin, filename); std::cout << std::endl; HINTERNET hSession, hService; hSession = InternetOpen(NULL, INTERNET_OPEN_TYPE_DIRECT, NULL, NULL, 0); hService = InternetConnect(hSession, server.c_str(), INTERNET_DEFAULT_FTP_PORT, username.c_str(), password.c_str(), INTERNET_SERVICE_FTP, 0, 0); FtpGetFile(hService, filename.c_str(), filename.c_str(), 0, 0, FTP_TRANSFER_TYPE_ASCII, 0); InternetCloseHandle(hService); InternetCloseHandle(hSession); }TEXT(asd)
macht btw auf keinen fall das, was du möchtest...bb
-
Danke für den weitere Lösung!
Jetzt möchte ich die Funktion "FtpFindFirstFile" anwenden. Wie geht das und was macht die?? Liest die Funktion die erste Datei aus und gibt den Namen zurück??
Bitte um weiter Hilfe
MfG SDS

-
-
SDS schrieb:
main-header.h ist von mir eine selbst geschriebene Header

Na und? Du kannst es trotzdem ins selbe Verzeichnis kopieren und dann einfach
#include "main-header.h"schreiben. Wenn es in Standard-Verzeichnissen liegt, kannst du auch <main-header.h> verwenden.