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

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

  1. alekssgor

    alekssgor Well-Known Member

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

    Код (Text):
    //число в строку
    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;
    }
     
Загрузка...

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