Имя пользователя:
Пароль:
 | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - Помогите найти загвоздку в циклах

Ответить
Настройки темы
C/C++ - Помогите найти загвоздку в циклах

Аватара для Apock

Пользователь


Сообщения: 75
Благодарности: 3

Профиль | Отправить PM | Цитировать


Есть следующая задача: получить из определённой папки список вложенных в неё папок(один уровень). В них находятся текстовые документы. Нужно, при нажатии на кнопку, внести в базу полные пути файлов и количество их строк из некоторых вложенных папок. Делается всё в С++ Builder 6.0.
Код: Выделить весь код
void __fastcall TForm1::Button1Click(TObject *Sender)
{
 TStringList *list = new TStringList;                 //для хранения содержимого файла
 int cnt;                                                           //число строк в файле
 int i=0;                                                           //для цикла while
 DirectoryListBox1->Directory=direct;             //установка начальной папки, заранее определённой в direct
 while(i < DirectoryListBox1->Count)
 {
  dir=DirectoryListBox1->Items->Strings[i];    //берём по очереди названия вложенных папок
  if(dir[1]='2')                                                  //нам нужны только папки, начинающиеся на "2" 
  {
   FileListBox1->Directory=direct+"\\"+dir;     //получаем список файлов в папке
   for(int z=0; z<FileListBox1->Count; z++)   //приступаем к их обработке
   {
    list->LoadFromFile(DirectoryListBox1->Directory+"\\"+FileListBox1->Items->Strings[z]);  //получаем содержимое файла
    cnt=list->Count;                                                                                                                 //считаем кол-во строк
    ADOTable1->Insert();                                                                                                         //добавляем данные в базу
    ADOTable1->FieldByName("FilePath")->AsString=DirectoryListBox1->Directory+"\\"+FileListBox1->Items->Strings[z];
    ADOTable1->FieldByName("Lines")->AsInteger=cnt;
    ADOTable1->Post();
   }
  }
  i++;
 }
}
Проблема в том, что в базу вносятся только файлы из первой папки, начинающейся с "2". В моём случае таких папок 5. Думал проблема с вложенными циклами(изначально оба были for). Поменял на while - не помогло.
Поставил в конце первого цикла вывод переменной i на Label и секундную паузу, чтоб проследить за выполнением цикла. DirectoryListBox1 содержит 11 папок. При запуске цикла программа некоторое время не отвечает, затем цикл закрывается, на Label цифра 7, а в базе опять таки те же файлы из первой папки.
В принципе проблема решается разделением циклов. Делаем, к примеру, скрытый компонент Memo. В него вносим названия папок первым циклом. Вторым уже пробегаемся по файлам. Так работает, но мне такой подход кажется нерациональным. И интересно всё-таки, что ж за загвоздка в данном коде?

-------
Говорят, что производители чипсетов не стоят на месте. Чушь. Как стоял завод корпорации 3dfx на перекрёстке 7-й авеню и 6-й дежавю, так и стоит.


Отправлено: 22:39, 06-09-2012

 

Аватара для Apock

Пользователь


Сообщения: 75
Благодарности: 3

Профиль | Отправить PM | Цитировать


Если это второй элемент, то странно. Как он тогда вообще какие-то данные находит. Ни одной папки с вторым символом "2" нет.
А с Мемо это я так. Привычно просто наблюдать за всем происходящим, пока программу пишешь.

-------
Говорят, что производители чипсетов не стоят на месте. Чушь. Как стоял завод корпорации 3dfx на перекрёстке 7-й авеню и 6-й дежавю, так и стоит.


Отправлено: 22:53, 17-09-2012 | #11



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - Помогите найти загвоздку в циклах

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Помогите найти mp3 united Хочу все знать 9 15-10-2008 17:41
Помогите найти Dj Dynamite Мобильные ОС, смартфоны и планшеты 4 07-05-2006 19:02
Помогите найти Dj Dynamite Мобильные ОС, смартфоны и планшеты 5 09-10-2004 22:31




 
Переход