Форум программистов, компьютерный форум, киберфорум
Наши страницы

C++ Builder

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 48, средняя оценка - 4.90
Day
1159 / 964 / 57
Регистрация: 29.10.2009
Сообщений: 1,385
#1

findfirst+findnext - C++ Builder

13.02.2010, 11:21. Просмотров 6277. Ответов 1
Метки нет (Все метки)

Много лет работал со сладкой парочкой findfirst-findnext
и совершенно не подозревал в них такого коварства!
Оказывается, несмотря на то, что даю флаг FA_DIREC,
последующий findnext перебирает ВСЕ файлы в директории.
Конечно, можно не директории отбросить if (.. & FA_DIREC),
но, представляете, сколько это жрет времени при построении
дерева всех поддиректориев диска!
FindFirst-FindNext дает тот же результат!
Нет ли менее прожорливой конструкции ?
Думаю, что эта проблема заинтересует не только меня.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <stdio.h>
#include <dos.h>
#include <dir.h>
#include <SysUtils.hpp>
//---------------------
main()
{ struct ffblk fb; int k;
  TSearchRec F;
  printf("findfirst:\n");
  k = findfirst("*.*", &fb, FA_DIREC);
  while (k==0) {
    printf("%s\n", fb.ff_name);
    k = findnext(&fb);
  }
  printf("FindFirst:\n");
  k = FindFirst("*.*", faDirectory, F);
  while (k==0) {
    printf("%s\n", F.Name.c_str());
    k = FindNext(F);
  }
}
/*******************/
Нашел исходный код findfirst - но он на ассемблере,
а я ним никогда не работал
Код небольшой (findfirst - 46 строк, findnext - 35)
Все построено на прерывании int 21h.
И такое ощущение, что так отрабатывает само это прерывание!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.02.2010, 11:21
Здравствуйте! Я подобрал для вас темы с ответами на вопрос findfirst+findnext (C++ Builder):

Как реализовать FindNext в FindDialog для компонента RichEdit? - C++ Builder
Для текстового редактора необходима кнопка &quot;Найти&quot;. Текст вводится в RichEdit. При открытии диалога FindDialog и нажатии кнопки &quot;найти...

FindFirst список файлов - C++ Builder
TSearchRec Folder; char Katalog ; int ScrollSearch; int Counter=0; \\переменные ScrollSearch =...

Просмотр списка содержимого папки функцией FindFirst - C++ Builder
Всем здрасте =) Нашел в интернете нужный код, но не понимаю как он работает :cry: void __fastcall TForm1::Button1Click(TObject *Sender)...

FindNext в Excel - C++ Builder БД
Необходимо искать слово в столбце, а найдя, записывать его в отдельной ячейке. С первой строкой справляется код: String Word =...

clientdataset FindNext() - C++ Builder БД
После манипуляций с отфельтрованым сетом нужно вернутся на ту же запись. Букмарк воде срабатывает, но при вызове FindNext() попадаем в...

Аналог функций findfirst - findnext - C++ Qt
Какие есть в Qt аналоги функций findfirst - findnext ? Задача - получить список файлов в папке. А также подпапок для организации...

1
Ex_Soft
107 / 107 / 3
Регистрация: 28.01.2009
Сообщений: 481
13.02.2010, 13:08 #2
тынць -> тынць
Problem:
When using findfirst with the FA_DIREC attribute, I get regular DOS files in addition to the directories. How do I get just the directories?
Solution:
Using FA_DIREC doesn't mean *only* return directories; it means include directories along with regular files. The solution is to check each ffblk found against the FA_DIREC attribute.
P.S. А где Вы
Цитата Сообщение от Day Посмотреть сообщение
Нашел исходный код findfirst - но он на ассемблере
? Бо у меня в стройке в $(BCB)\Source\Rtl\Source\io\findfirst.c - ни строчки на ассемблере...

Цитата Сообщение от Day Посмотреть сообщение
Все построено на прерывании int 21h.
И такое ощущение, что так отрабатывает само это прерывание!
Цитата Сообщение от Э. Успенский. "Крокодил Гена и его друзья"
- ...Только я тебе дам гнутые гвозди. Идет?
- Идет! - обрадовался Чебурашка. - Большое спасибо. Только дайте мне уж заодно и гнутый молоток!
- Гнутый молоток? - удивился кладовщик. - А зачем?
- Как - зачем? Забивать гнутые гвозди!..
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.02.2010, 13:08
Привет! Вот еще темы с ответами:

Работа с FindFirst, FindNext, FindClose - Delphi
возникли проблемы опроса содержимого директории при использовании этого способа. Во первых выдает в SR: TSearchRec; SR.Name = '.' - что...

поиск файлов (findfirst, findnext) - C (СИ)
Здравствуйте, вот пробую написать программу для поиска всех файлов( по маске *.*) определенной папки нашел вот такой пример, но он не...

Проблемы с Recordset.FindNext - Базы данных
Привет всем ! Есть таблица, в которой есть поле ПЛ, содержащее следующие значения: либо 'за первую половину', либо 'за вторую...

использование TDateTime и FindNext - Delphi
Всем привет есть такой вопрос возможно ли как нибудь изменить этот код что бы он искал не только один файл с датой изменения ? var ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.