Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Visual C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.07.2009, 17:12   #1
Pord
Пользователь
 
Регистрация: 29.10.2008
Сообщений: 20
По умолчанию Помогите найти ошибку(VS, MFC, FTP)

Пытаюсь просмотреть FTP с помощью:
Код:
    CInternetSession sess(_T("dsadsaa"));
    CFtpConnection* pConnect = NULL;
    pConnect = sess.GetFtpConnection(_T("ftp.byfly.by"));
    FindFile(pConnect);
где FindFile
Код:
void CFTPClientDlg::FindFile(CFtpConnection *pConnect, HTREEITEM pItem=TVI_ROOT)
{
    CFtpFileFind finder(pConnect);
    BOOL bWorking = finder.FindFile(_T("*"));
    while (bWorking)
    {
       bWorking = finder.FindNextFile();
       if (finder.IsDirectory())
       {
           HTREEITEM parent=CFileSystem.InsertItem(finder.GetFileName(),pItem);
           pConnect->SetCurrentDirectory(finder.GetFileName());
           FindFile(pConnect,parent);
       }
       else 
           CFileSystem.InsertItem(finder.GetFileName(),pItem);
    }
}
CFileSystem - экзмпляр CTreeCtrl

В результате выводит только верхние катологи и файлы. Если кто-то знает в чем ошибка, то подскажите пожалуйста.
Pord вне форума Ответить с цитированием
Старый 12.07.2009, 13:32   #2
lennon
Заблокирован
 
Регистрация: 18.11.2007
Сообщений: 254
По умолчанию

кхм................................ ............. чот непонятно какие именно верхние каталоги и файлы? те шо лежат в корне фтп или самые последние ?

Последний раз редактировалось lennon; 12.07.2009 в 13:39.
lennon вне форума Ответить с цитированием
Старый 12.07.2009, 15:27   #3
Pord
Пользователь
 
Регистрация: 29.10.2008
Сообщений: 20
По умолчанию

только те, что лежат в корне. как только заходит в другою дерикторию(вызывается рекурсия), bWorking становится равной 0(хотя файлы в этой директории есть). и программа выходит из рекурсии.
Pord вне форума Ответить с цитированием
Старый 12.07.2009, 16:04   #4
lennon
Заблокирован
 
Регистрация: 18.11.2007
Сообщений: 254
По умолчанию

я выкупил в чем проблема! здесь надо искать файлы не рекурсивно, когда ты вызываешь функцию рекурсивно та функция из которыой вызвал ешо работает, так вот этот класс CFtpFileFind не закрываеться, тоесть выходит может быть только один CFtpFileFind, а из за рекурсии получаеться что он не один на данном CFtpConnection. перед каждым вызовом FindFile нужно вызывать Close есдли FindFile был уже вызван когдато, именно вв этот момент фтп передает данные о списке. нуэн ну надеюся вы поняли что я имею ввиду : ) щас функцию по другому напишу.

Последний раз редактировалось lennon; 12.07.2009 в 16:07.
lennon вне форума Ответить с цитированием
Старый 12.07.2009, 16:27   #5
lennon
Заблокирован
 
Регистрация: 18.11.2007
Сообщений: 254
По умолчанию

Код:
void FindFile(CFtpConnection *pConnect)
{
	int iter = -1;
	CFtpFileFind finder(pConnect);
	CList<CString> list;


	while(iter < list.GetCount())
	{

		BOOL bWorking = finder.FindFile(_T("*.*"));
		while (bWorking)
		{
			bWorking = finder.FindNextFile();
			CString str = finder.GetFileName();
			if (finder.IsDirectory() && str != "." && str != "..")
			{
				list.AddTail(str);
			}

		}
		iter++;
		finder.Close();
		CString dir = list.GetAt(list.FindIndex(iter));
		pConnect->SetCurrentDirectory(dir);
	}

}
ну а с TreeView сам уже додумаешь : )
lennon вне форума Ответить с цитированием
Старый 12.07.2009, 17:08   #6
Pord
Пользователь
 
Регистрация: 29.10.2008
Сообщений: 20
По умолчанию

Спасибо за помощь
Pord вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
помогите найти ошибку lubafffka Общие вопросы C/C++ 5 16.06.2009 21:53
Помогите найти ошибку Devoto Общие вопросы Delphi 4 18.11.2008 00:26
Помогите найти ошибку JOFRIF Помощь студентам 8 22.04.2008 14:22