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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 01.08.2013, 16:51   #1
Baburek
Форумчанин
 
Аватар для Baburek
 
Регистрация: 12.12.2010
Сообщений: 205
По умолчанию idFTP->List

Привет. Пытаюсь рекурсивно получать список всех файлов(с выводом пути в мемо1), для дальнейших операций. И возникает проблема. Делаю следующим образом:

Код:
void TForm1::GetFolder(AnsiString CurFolder)
{
    idFTP->ChangeDir(CurFolder);
if (slDirs)
        delete slDirs;    
        slDirs = new TStringList;        
        idFTP->List(slDirs, ' ', False);  //получаю все файлы в папке
        Memo1->Lines->AddStrings(slDirs); // записываю в Мемо
        for (int i=0; i<=(Form1->Memo1->Lines->Count-1); i++)
        {
        sa = Memo1->Lines->Strings[i]; //по одной достаю из Мемо
        if (! strstr(sa.c_str(),"."))   //если не файл
        {
           char* a = sa.c_str();
           char* cf = CurFolder.c_str();
           strcat(cf,"//");          //меняем путь
           strcat(cf,a);
           GetFolder(cf); // -----------------------ОШИБКА: AccessViolation at address 00000000
           CurFolder[strlen(CurFolder.c_str())-strlen(strrchr(CurFolder.c_str(),'//'))]='\0' ;
       ...
       }
       else      {
       ...    //else
               }
        }
}
Стартует функция так:
Код:
GetFolder(".//MyFolder");
Очевидно накосячил. О чем мог забыть? Или не подумать.

Последний раз редактировалось Baburek; 02.08.2013 в 09:15.
Baburek вне форума Ответить с цитированием
Старый 02.08.2013, 12:21   #2
Baburek
Форумчанин
 
Аватар для Baburek
 
Регистрация: 12.12.2010
Сообщений: 205
По умолчанию

А если напрямую назначить существующую папку в цикле - говорит, что ее не существует:

Код:
void GetFolder(AnsiString CurFolder)
{
    slDirs->Clear();
    idFTP->ChangeDir(CurFolder);
    idFTP->List(slDirs, ' ', False);
    Memo1->Lines->AddStrings(slDirs);
        for (int i=0; i<=(Form1->Memo1->Lines->Count-1); i++)
        {
        sa = Memo1->Lines->Strings[i];
        if (! strstr(sa.c_str(),"."))
                         GetFolder("./MyFolder/img");
        }
}
Вызов:
Код:
GetFolder("./MyFolder");
Ошибка:
Код:
Project Project1.exe raised exception class EIdProtocolReplyError with message './MyFolder/img: No such file or directory.'. Process stopped. Use Step or Run to continue.
Если же написать в вызове функции:
Код:
GetFolder("./MyFolder/img");
то выведутся все файлы данной папки.
Baburek вне форума Ответить с цитированием
Старый 02.08.2013, 16:04   #3
Baburek
Форумчанин
 
Аватар для Baburek
 
Регистрация: 12.12.2010
Сообщений: 205
По умолчанию

Разобрался, тему можно закрыть
Baburek вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не работает IdFTP.List Чиполлино Работа с сетью в Delphi 4 05.01.2012 20:06
Компонент IdFTP 6epreu Работа с сетью в Delphi 2 22.09.2011 15:31
[c++][list] Порядок обработки двух list Padavan Помощь студентам 1 10.05.2011 14:56
idFTP и TreeView vitawt Работа с сетью в Delphi 3 21.02.2009 02:04
Проблема с IDFTP esy Работа с сетью в Delphi 4 04.12.2008 18:22