FtpGetFile возвращает 0, а GetLastError() 12018. Код примера: Code (Text): DWORD FTPGetFile(LPWSTR address,LPWSTR user,LPWSTR pasw,LPWSTR local_file,LPWSTR remote_file,DWORD attr){ HINTERNET hConnect = InternetOpen(NULL,INTERNET_OPEN_TYPE_DIRECT,NULL,NULL,0); if (!hConnect) return 0; HINTERNET hFTP=InternetConnect(hConnect,address,INTERNET_DEFAULT_FTP_PORT,user,pasw,INTERNET_SERVICE_FTP,INTERNET_FLAG_PASSIVE,0); DWORD ret_code ; if (hFTP){ ret_code = FtpGetFile(hConnect,remote_file,local_file,false,attr,FTP_TRANSFER_TYPE_BINARY|INTERNET_FLAG_RELOAD,0); InternetCloseHandle(hFTP); InternetCloseHandle(hConnect); } else { InternetCloseHandle(hConnect); ret_code = 0; }; return ret_code; }; FTPGetFile(_T("ftp.abcdef.com"),_T("abcdef_5939601"),_T("abcdef"),_T("F:\\remoute_ping.txt"),_T("htdocs/123/ping.txt"),FILE_ATTRIBUTE_NORMAL); В чем проблема ?... другие фтп клиенты могут получить файл.
FtpGetFile(hConnect,remote_file,local_file,false,attr,FTP_TRANSFER_TYPE_BINARY|INTERNET_FLAG_RELOAD,0); тут кажется ты напутал, вместо hConnect поставь hFTP
Да ты прав. Может еще подскажешь в чем тут проблема: Code (Text): DWORD FTPPutFile(wchar_t* address,wchar_t* user,wchar_t* pasw,wchar_t* local_file,wchar_t* remote_file){ HINTERNET hConnect = InternetOpen(NULL,INTERNET_OPEN_TYPE_PRECONFIG,NULL,NULL,0); if (!hConnect) return 0; HINTERNET hFTP=InternetConnect(hConnect,address,INTERNET_DEFAULT_FTP_PORT,user,pasw,INTERNET_SERVICE_FTP,INTERNET_FLAG_CACHE_IF_NET_FAIL ,0); DWORD ret_code ; if (hFTP){ // FtpSetCurrentDirectory(hFTP,_T("/htdocs/")); ret_code = FtpPutFile(hFTP,local_file,remote_file,FTP_TRANSFER_TYPE_BINARY|INTERNET_FLAG_TRANSFER_BINARY ,(DWORD_PTR)0); GetLastError(); InternetCloseHandle(hFTP); InternetCloseHandle(hConnect); } else { InternetCloseHandle(hConnect); ret_code = 0; }; return ret_code; }; Значит FtpPutFile отправляет файл на сервер в течении 5-7сек, при этом она завершается возвращает 0. А GetLastError() возвращает 12002 ...? На сервере создается временный файл, который после некоторого времени пропадает от туда, а там появляется файл remote_file, но он пустой(. Розмер файла для отправки 400байт, канал 256кбит.
12002 ERROR_INTERNET_TIMEOUT The request has timed out. Может у тебя прав не хватает для создания файла в данной директории?
Клиент фтп может(FileZilla) закинуть туда файл, я ему даю той же логин/пароль. А где ты это описание взял ?...
Если не вызывать FtpSetCurrentDirectory, то в корневой директории файл создается без проблем? Если да, то вероятно что этой апи ты неверные параметры передаешь. Прицепляй к FileZilla отладчик ставь бряк на FtpSetCurrentDirectory, трейси и сравнивай результаты со своим кодом. http://junios.net/tc/tag/GetLastError
Уррааа !!!! Нашол ошибку )))!!! Значит проблема была в том что файл еще был не создан когда вызывал FtpPutFile. Дописав две строки эту проблема пропала, вот решении ее: Code (Text): DWORD FTPPutFile(const wchar_t* address,const wchar_t* user,const wchar_t* pasw,const wchar_t* local_file,const wchar_t* remote_file){ HINTERNET hConnect = InternetOpen(NULL,INTERNET_OPEN_TYPE_PRECONFIG,NULL,NULL,0); if (!hConnect) return 0; HINTERNET hFTP=InternetConnect(hConnect,address,INTERNET_DEFAULT_FTP_PORT,user,pasw,INTERNET_SERVICE_FTP,INTERNET_FLAG_PASSIVE ,0); DWORD ret_code ; if (hFTP){ HINTERNET hOpen = FtpOpenFile(hFTP,remote_file, GENERIC_WRITE,FTP_TRANSFER_TYPE_BINARY|INTERNET_FLAG_TRANSFER_BINARY,0); InternetCloseHandle(hOpen); ret_code = FtpPutFile(hFTP,local_file,remote_file,FTP_TRANSFER_TYPE_BINARY|INTERNET_FLAG_TRANSFER_BINARY,(DWORD_PTR)0); GetLastError(); InternetCloseHandle(hFTP); InternetCloseHandle(hConnect); } else { InternetCloseHandle(hConnect); ret_code = 0; }; return ret_code; };