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

alekssgor

Well-known member
26.05.2008
118
0
#1
Как получить полный список файлов на 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;
}