FTP протокол (рекурсивная загрузка файлов на сервер)

Тема в разделе "LANGS.C", создана пользователем HandMill, 13 авг 2007.

  1. HandMill

    HandMill New Member

    Публикаций:
    0
    Регистрация:
    31 июл 2007
    Сообщения:
    5
    Делаю первые шаги в работе FTP. Не могу разобраться... скорее всего я набочил с рекурсивным перебором файлов - у меня нормально копируются ВСЕ директории, а вот с файлами - засада, НИ один файл не хочет копироваться(хотя дома на фтп-сервере, установленном на мою машину всё нормально копировалось).
    Задача: скопировать указанную директорию на ФТП сервер. Плюс - не могу понять, как ПРАВИЛЬНО менять директории, делаю так:
    Код (Text):
    1.             if(!FtpSetCurrentDirectory(hconnect, "test"))
    2.             {
    3.                 MessageBox(0,"Error occured","ERROR",MB_ICONERROR);
    4.             }
    на фтп сервере указанная директория существует, а я получаю "ERROR", хотя директория то МЕНЯЕТСЯ и если производить запись, то она успешно будет произведена в директорию "test".

    вот исходники(Dev-cpp): http://webfile.ru/1495609
     
  2. HandMill

    HandMill New Member

    Публикаций:
    0
    Регистрация:
    31 июл 2007
    Сообщения:
    5
    Может кто-то всё-таки сталкивался с загрузкой файлов на сервер? Пишу такой код(я уже из себя выхожу):

    Код (Text):
    1. #include <windows.h>
    2. #include <wininet.h>
    3.  
    4. HINTERNET ses;
    5. HINTERNET hconnect;
    6.  
    7. int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd )
    8. {
    9.     ses=InternetOpen("ftpX v.0.0.0.1",INTERNET_OPEN_TYPE_DIRECT,0,0,0);
    10.     if(!ses)
    11.     {
    12.         MessageBox(0,"Some error on InternetOpen [step 1]","ERROR",MB_ICONERROR);
    13.     }
    14.     else
    15.     {
    16.         hconnect=InternetConnect(ses,"192.168.61.164",INTERNET_DEFAULT_FTP_PORT,"tobo-robot","toborobot",INTERNET_SERVICE_FTP,INTERNET_FLAG_PASSIVE,0);
    17.         if(!hconnect)
    18.         {
    19.             MessageBox(0,"Some error on InternetConnect [step 2]","ERROR",MB_ICONERROR);
    20.         }
    21.         else
    22.         {
    23.             if(!FtpPutFile(hconnect,"E:\\d2k2_crackmes\\_d2k2_crkme01\\d2k2_crackme01.exe","d2k2_crackme01.exe",FTP_TRANSFER_TYPE_BINARY,0))
    24.             {
    25.                  MessageBox(0,"Some error on FtpPutFile [step 3]","ERROR",MB_ICONERROR);
    26.                  return 0;
    27.             }
    28.         }
    29.     }
    30.     return 1;
    31. }
    Файл не грузится на сервер, хотя ведь соединение идёт нормально ... и на сервере ВСЕ настройки нормально выставлены ... Например через тот же менеджер фтп-сайтов(FileZilla) может нормально загружать туда файлы...
     
  3. MSoft

    MSoft New Member

    Публикаций:
    0
    Регистрация:
    16 дек 2006
    Сообщения:
    2.854
    Хм... могу только посоветовать в ольке глянуть, что за ошибка вылетает после FtpPutFile. Иначе что толку гадать?
     
  4. q_q

    q_q New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2003
    Сообщения:
    1.706
    HandMill
    Попробуй использовать ноль вместо INTERNET_FLAG_PASSIVE в вызове InternetConnect.
     
  5. HandMill

    HandMill New Member

    Публикаций:
    0
    Регистрация:
    31 июл 2007
    Сообщения:
    5
    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 возвращает ((.
     
  6. censored

    censored New Member

    Публикаций:
    0
    Регистрация:
    5 июл 2005
    Сообщения:
    1.615
    Адрес:
    деревня "Анонимные Прокси"
    HandMill
    Код (Text):
    1. #define STRICT
    2. #include <windows.h>
    3. #include <wininet.h>
    4. #include <tchar.h>
    5. #include <stdio.h>
    6.  
    7. int _tmain(int argc, TCHAR ** argv) {
    8.   HINTERNET session, conn;
    9.  
    10.   enum {
    11.     FTP = INTERNET_FLAG_KEEP_CONNECTION |
    12.           INTERNET_FLAG_NEED_FILE |
    13.           INTERNET_FLAG_PASSIVE |
    14.           INTERNET_FLAG_TRANSFER_BINARY
    15.   };
    16.  
    17.   session = InternetOpen(_T("ftp"), INTERNET_OPEN_TYPE_PRECONFIG, 0, 0, 0);
    18.   if (session!=NULL) {
    19.     conn = InternetConnect(session,
    20.                            _T("*******.ru"),
    21.                            INTERNET_DEFAULT_FTP_PORT,
    22.                            _T("********"),
    23.                            _T("********"),
    24.                            INTERNET_SERVICE_FTP,
    25.                            FTP,
    26.                            0);
    27.     if (conn!=NULL) {
    28.       BOOL result;
    29.       DWORD t;
    30.       result = FtpPutFile(conn, _T("test.txt"), _T("/sites/*******.ru/html/private/test.txt"), FTP_TRANSFER_TYPE_BINARY, &t);
    31.       _tprintf(result ? "That's ok!\n" : "FtpPutFile() error %d\n", GetLastError());
    32.       InternetCloseHandle(conn);
    33.     } else {
    34.       _tprintf(_T("InternetConnect() error %d\n"), GetLastError());
    35.     }
    36.     InternetCloseHandle(session);
    37.   } else {
    38.     _tprintf(_T("InternetOpen() error %d\n"), GetLastError());
    39.   }
    40. }
    41.  
    42. /* [EOF] */
    Только что проверил -- все ок.
     
  7. HandMill

    HandMill New Member

    Публикаций:
    0
    Регистрация:
    31 июл 2007
    Сообщения:
    5