1. Наш канал codeby в telegram. Пишем об информационной безопасности, методах защиты информации, о программировании. Не пропускай новости с кодебай, будь в тренде ! Подробнее ...

    Скрыть объявление

Список Файлов На Ftp Сервере

Тема в разделе "С и С++", создана пользователем alekssgor, 9 мар 2012.

  1. alekssgor

    alekssgor Well-Known Member

    Репутация:
    0
    Регистрация:
    26 май 2008
    Сообщения:
    118
    Симпатии:
    0
    Как получить полный список файлов на FTP(включая вложенные папки) на WinApi

    Код:
    //число в строку
    char* IntToStr(int a)
    {
    char* text = new char[10];
    itoa(a, text, 10);
    return text;
    }
    //выводим список файлов с FTP сервера(без вложений)
    BOOL WINAPI DisplayFtpDir(HWND hListBox, HINTERNET hConnection, DWORD dwFindFlags)
    {
    WIN32_FIND_DATAA dirInfo;
    HINTERNET	  hFind;
    DWORD		  dwError;
    BOOL			retVal = FALSE;
    char			szMsgBuffer[FTP_FUNCTIONS_BUFFER_SIZE];
    char			szFName[FTP_FUNCTIONS_BUFFER_SIZE];
    
    SendMessage( hListBox, LB_RESETCONTENT, 0, 0 );
    hFind = FtpFindFirstFileA( hConnection, TEXT( "*.*" ), &dirInfo, dwFindFlags, 0 );
    if ( hFind == NULL )
    {
    dwError = GetLastError( );
    if( dwError == ERROR_NO_MORE_FILES )
    {
    strcpy(szMsgBuffer,"Нет файлов на FTP сервере" );
    retVal = TRUE;
    goto DisplayDirError_1;
    }
    strcpy( szMsgBuffer,"Ошибка при выполнении функции FtpFindFirstFile");
    goto DisplayDirError_1;
    }
    
    do
    {
    if(dirInfo.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
    {
    strcpy(szFName, "<DIR> ");
    strcat(szFName, dirInfo.cFileName);
    SendMessageA(hListBox,LB_ADDSTRING,0,(LPARAM)szFName);
    }
    else
    {
    strcpy(szFName, "<file> ");
    strcat(szFName, dirInfo.cFileName);
    strcat(szFName, " (");
    strcat(szFName, IntToStr(( dirInfo.nFileSizeHigh * ( MAXDWORD +1)) + dirInfo.nFileSizeLow));
    strcat(szFName, " байт)");
    SendMessageA(hListBox,LB_ADDSTRING,0,(LPARAM)szFName);
    }
    } 
    while( InternetFindNextFile( hFind, (LPVOID) &dirInfo ) );
    
    if( ( dwError = GetLastError( ) ) == ERROR_NO_MORE_FILES )
    {
    InternetCloseHandle(hFind);
    return( TRUE );
    }
    strcpy( szMsgBuffer, "Ошибка при выполнении функции FtpFindNextFile" );
    DisplayDirError_1:
    InternetCloseHandle( hFind );
    MessageBox( 0,szMsgBuffer, "DisplayFtpDir( ) Problem", MB_OK | MB_ICONERROR );
    return( retVal );
    }
    
    
    static HINTERNET hRootHandle, hFtpConnect;
    static HWND hListBox;
    case WM_CREATE:
    {
    hListBox = CreateWindow("LISTBOX", NULL, WS_CHILD|WS_VISIBLE|LBS_STANDARD,10,10,270,300, 
    hwnd,(HMENU)0,hinstance,NULL);
    HFONT h=CreateFontA(18,0,0,0,FW_NORMAL,1,0,0,0,OUT_DEFAULT_PRECIS,0,
    DEFAULT_QUALITY,DEFAULT_PITCH|FF_DECORATIVE,"ARIAL");
    SetWindowFont(hListBox, h, TRUE);
    break;
    }
    case WM_LBUTTONDOWN:
    {
    DWORD dwError;
    char lpError[256];
    DWORD dwSize=256;
    hRootHandle = InternetOpenA( "Example",INTERNET_OPEN_TYPE_DIRECT,NULL,NULL,0);
    //Подключаемся к FTP 
    hFtpConnect = InternetConnectA(hRootHandle,"ftp.narod.ru",INTERNET_DEFAULT_FTP_PORT,"логин","пароль",
    INTERNET_SERVICE_FTP, INTERNET_FLAG_PASSIVE,0);
    //Проверяем на ошибку подключения
    if(!hFtpConnect)
    {
    
    MessageBoxA(hwnd,"Ошибка при подключении к FTP серверу","Ошибка",0);
    InternetGetLastResponseInfoA(&dwError,lpError,&dwSize);
    MessageBoxA(hwnd,lpError,"Ошибка",0);
    } 
    else
    MessageBoxA(hwnd,"Удачное подключение к FTP серверу","Сообщение",0);
    //Выводим список файлов FTP сервера  
    DisplayFtpDir(hListBox, hFtpConnect,INTERNET_FLAG_RELOAD);
    //Закрываем соединение
    InternetCloseHandle(hFtpConnect); 
    InternetCloseHandle(hRootHandle);							  
    break;
    }
     
Загрузка...

Поделиться этой страницей