Модераторы: feodorv
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> WININET - ftp upload 
:(
    Опции темы
setty
Дата 13.8.2007, 21:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 66
Регистрация: 8.6.2006
Где: Украина

Репутация: нет
Всего: нет



вобщем задача стоит в том чтоб залить на указанный фтп указанную локальную папку целиком (с поддиректориями)
ранее я работал через сокеты, однако теперь прознал про wininet и решив облегчить себе жизнь взяль её на вооружение, однако оказалось что нетут то было. Вобщем поставленную задачу я решаю таким образом:
Код

#include "stdafx.h"
#include <tchar.h>
#include <iostream>
#include <windows.h>
#include <wininet.h>

using namespace std;

//Return Values:
//0 - such an error when no any possibilityes to end execution
//1 - success
//Bags:
// - there's no way to copy root dirrectories such as c:\ or d:\

#define BUFSIZE 999

int UploadDir(HINTERNET hConnect, char* dirPath)
{    TCHAR oldDirrectory[BUFSIZE];
    char    buffer[999];
    DWORD dwRet = GetCurrentDirectory(BUFSIZE, oldDirrectory);

    if(!SetCurrentDirectory(dirPath))                    //entering terget dirrectory
    {    cout<<"Invalid drirrectory path!";
        return(0);
    }
    if(!FtpCreateDirectory(hConnect, dirPath))            //trying to create dirrrectory on server
    {    cout<<"Can't create dirrectory on ftp server!";    //if olready exist....??????????
    //    SetCurrentDirectory(oldDirrectory);
    //    return(0);
    }
    FtpSetCurrentDirectory(hConnect, dirPath);            //entering new-created dirrectory on server
    
    HANDLE hSearch;
    WIN32_FIND_DATA    fdata;
    char cmd[8]="cwd..";
    cmd[6]=0x0d;
    cmd[7]=0x0a;
    cmd[8]=0x0;
    hSearch = FindFirstFile("*", &fdata);
    if(!hSearch)return 0;
    do
    {    if(strcmp(fdata.cFileName, _T(".")))
            if(strcmp(fdata.cFileName, _T("..")))
            {    if(fdata.dwFileAttributes==FILE_ATTRIBUTE_DIRECTORY) UploadDir(hConnect, fdata.cFileName);
                wsprintf(buffer, "%s\\%s\\%s", oldDirrectory, dirPath, fdata.cFileName);
                FtpPutFile(hConnect, fdata.cFileName, buffer, FTP_TRANSFER_TYPE_BINARY, NULL);
                GetLastError();
            }
    } while (FindNextFile(hSearch, &fdata));
    FtpCommand(hConnect, FALSE, FTP_TRANSFER_TYPE_ASCII, cmd, NULL, NULL);
    FindClose(hSearch);
    SetCurrentDirectory(oldDirrectory);
    return 1;
}

int _tmain(int argc, _TCHAR* argv[])
{     if (argc==3)
     {    HINTERNET hInternet = InternetOpenA("FTP:xcopy", INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0);
          if (hInternet==0)
          {     cout<<"Error in InternetOpen!\n";
               return 1;
          }
          HINTERNET hConnect = InternetConnect(hInternet, argv[1], INTERNET_DEFAULT_FTP_PORT,
                NULL,NULL, INTERNET_SERVICE_FTP, 9, 0);
          if (hConnect == NULL)
          {     cout<<"Error in InternetConnect!\n";
               return 1;
          }
          cout<<"All right :)!\n";
        UploadDir(hConnect, argv[2]);
         
        InternetCloseHandle(hConnect);
        InternetCloseHandle(hInternet);
    }
    else cout<<"Usage: ftp_xcopy address path\n\taddress - ftp server\n\tpath - directory to upload";
    return 0;
}

сие нормально конектится к указанному серверу, и создает там такую же иерархию папок как и в указанной локальной. Однако проблемма возникла с FtpPutFile котоаря у меня возвращает ошибку ERROR_SXS_ASSEMBLY_NOT_FOUND (00002EE3). Несматря на это сервер получает 
несмотря, однако, на то что сервер все же получает комманды: 

[2007-08-13 - 19:00:56] - [76] KEYWORD: TYPE -- PARAMS: I 
[2007-08-13 - 19:00:56] - [76] KEYWORD: PASV -- PARAMS: 
[2007-08-13 - 19:00:56] - [76] KEYWORD: STOR -- PARAMS: D:\projects\1111111\release\suko\socks.log

далее я пытался зайти на сервер другими клиентами и видел что они высылают retr вместо stor'a.
описание ошибки - "The referenced assembly is not installed on your system". меня лишь натолкнуло на смеотворное предположение что у меня могла быть закрыта какаято служба или что то в это роде (ну а какие асембли должны быть еще инсталены то?). Обсуждения этой ошибки встречается лишь в английских источниках и  довольно скупы и несмтря на то что язык мне понятен в решении своей проблеммы я не продвинулся ни на йоту.
  Сделав все возможное чтоб самостоятельно решить проблемму я стою на грани того чтоб сдатся ибо решительно не вижу путей в которые я мог бы отпарвить свое сознание в поисках решения проблеммы а посему решил прибегнуть к последнему средстве - попросить у вас помоши и совета. 
  Есть ли какие мысли?

З.Ы. на сервере стоит полный доступ для анонимного пользователя (в том чиасле создание файлов и папок)
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Сети | Следующая тема »


 




[ Время генерации скрипта: 0.0689 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.