Делаю первые шаги в работе FTP. Не могу разобраться... скорее всего я набочил с рекурсивным перебором файлов - у меня нормально копируются ВСЕ директории, а вот с файлами - засада, НИ один файл не хочет копироваться(хотя дома на фтп-сервере, установленном на мою машину всё нормально копировалось). Задача: скопировать указанную директорию на ФТП сервер. Плюс - не могу понять, как ПРАВИЛЬНО менять директории, делаю так: Код (Text): if(!FtpSetCurrentDirectory(hconnect, "test")) { MessageBox(0,"Error occured","ERROR",MB_ICONERROR); } на фтп сервере указанная директория существует, а я получаю "ERROR", хотя директория то МЕНЯЕТСЯ и если производить запись, то она успешно будет произведена в директорию "test". вот исходники(Dev-cpp): http://webfile.ru/1495609
Может кто-то всё-таки сталкивался с загрузкой файлов на сервер? Пишу такой код(я уже из себя выхожу): Код (Text): #include <windows.h> #include <wininet.h> HINTERNET ses; HINTERNET hconnect; int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd ) { ses=InternetOpen("ftpX v.0.0.0.1",INTERNET_OPEN_TYPE_DIRECT,0,0,0); if(!ses) { MessageBox(0,"Some error on InternetOpen [step 1]","ERROR",MB_ICONERROR); } else { hconnect=InternetConnect(ses,"192.168.61.164",INTERNET_DEFAULT_FTP_PORT,"tobo-robot","toborobot",INTERNET_SERVICE_FTP,INTERNET_FLAG_PASSIVE,0); if(!hconnect) { MessageBox(0,"Some error on InternetConnect [step 2]","ERROR",MB_ICONERROR); } else { if(!FtpPutFile(hconnect,"E:\\d2k2_crackmes\\_d2k2_crkme01\\d2k2_crackme01.exe","d2k2_crackme01.exe",FTP_TRANSFER_TYPE_BINARY,0)) { MessageBox(0,"Some error on FtpPutFile [step 3]","ERROR",MB_ICONERROR); return 0; } } } return 1; } Файл не грузится на сервер, хотя ведь соединение идёт нормально ... и на сервере ВСЕ настройки нормально выставлены ... Например через тот же менеджер фтп-сайтов(FileZilla) может нормально загружать туда файлы...
Хм... могу только посоветовать в ольке глянуть, что за ошибка вылетает после FtpPutFile. Иначе что толку гадать?
q_q не помогло (( А вот с FtpSetCurrentDirectory мне помогли разобраться - для того что бы она нормально работала нужно INTERNET_FLAG_ASYNC заменить на 0(у меня он раньше тут стоял: InternetOpen("ftpX v.0.0.0.1",INTERNET_OPEN_TYPE_DIRECT,0,0,INTERNET_FLAG_ASYNC)). Осталось только с FtpPutFile разобраться. MSoft в ольке то FtpPutFile 0 возвращает ((.
HandMill Код (Text): #define STRICT #include <windows.h> #include <wininet.h> #include <tchar.h> #include <stdio.h> int _tmain(int argc, TCHAR ** argv) { HINTERNET session, conn; enum { FTP = INTERNET_FLAG_KEEP_CONNECTION | INTERNET_FLAG_NEED_FILE | INTERNET_FLAG_PASSIVE | INTERNET_FLAG_TRANSFER_BINARY }; session = InternetOpen(_T("ftp"), INTERNET_OPEN_TYPE_PRECONFIG, 0, 0, 0); if (session!=NULL) { conn = InternetConnect(session, _T("*******.ru"), INTERNET_DEFAULT_FTP_PORT, _T("********"), _T("********"), INTERNET_SERVICE_FTP, FTP, 0); if (conn!=NULL) { BOOL result; DWORD t; result = FtpPutFile(conn, _T("test.txt"), _T("/sites/*******.ru/html/private/test.txt"), FTP_TRANSFER_TYPE_BINARY, &t); _tprintf(result ? "That's ok!\n" : "FtpPutFile() error %d\n", GetLastError()); InternetCloseHandle(conn); } else { _tprintf(_T("InternetConnect() error %d\n"), GetLastError()); } InternetCloseHandle(session); } else { _tprintf(_T("InternetOpen() error %d\n"), GetLastError()); } } /* [EOF] */ Только что проверил -- все ок.