powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Как возобновить поиск из той же папки, но не трогая первую партию файлов, через срок
17 сообщений из 17, страница 1 из 1
Как возобновить поиск из той же папки, но не трогая первую партию файлов, через срок
    #39692633
AdamAry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как можно возобновить поиск из той же папки, но не трогая первую партию из 20 файлов, через некоторое время по нажатию баттона?

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
procedure TFMain.GetFilesNamesFromFolder(Sender: TObject);
var
  SR: TSearchRec;
  FilesStrings: TStrings;
begin
  try // added
  FilesStrings:=TStringList.Create;
  SelectedPath := EditCurrentFolderPath.Text;
  if FindFirst(SelectedPath + '*.*', faAnyFile - faVolumeID - faDirectory - faHidden - faSysFile - faArchive, SR) = 0 then
  repeat
     FilesStrings.Add(SelectedPath + SR.Name);
  until FindNext(SR) <> 0;
   FindClose(SR);
  finally
    FreeAndNil(FilesStrings);
end;
...
Рейтинг: 0 / 0
Как возобновить поиск из той же папки, но не трогая первую партию файлов, через срок
    #39692641
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AdamAryКак можно возобновить поиск из той же папки, но не трогая первую партию из 20 файлов,
через некоторое время по нажатию баттона?

Никак. Запоминай или иначе помечай уже обработанные файлы, потом пропускай их.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Как возобновить поиск из той же папки, но не трогая первую партию файлов, через срок
    #39692642
Фотография JayDi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нажо сохранять использованные файлы в список, после чего при поиске проверять, были ли новые файлы обработаны или нет.
...
Рейтинг: 0 / 0
Как возобновить поиск из той же папки, но не трогая первую партию файлов, через срок
    #39692655
AdamAry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JaDi,
Как именно это сделать "после чего при поиске проверять, были ли новые файлы обработаны или нет." ?:
Допустим мне надо продолжить с двадцатого файла или с названия файла 'c:\folder\file9898.dbf', так где использовать порядковый номер или название (не знаю что надо) при поиске FindFirst и FindNext/
...
Рейтинг: 0 / 0
Как возобновить поиск из той же папки, но не трогая первую партию файлов, через срок
    #39692658
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AdamAry> Допустим мне надо продолжить с двадцатого файла или с названия файла

FindFirst и FindNext не умеют продолжать с файлам по номеру/имени,
если поиск уже завершен - нужно создавать новый SearchRec.
А проверять (точнее пропускать) предлагают по FileName, чи как его там -
if (SearchRec.FileName = 'строка' или Pos или List.IndexOf или цикл) then пропустить
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Как возобновить поиск из той же папки, но не трогая первую партию файлов, через срок
    #39692660
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AdamAryКак именно это сделать "после чего при поиске проверять, были ли новые файлы обработаны
или нет." ?:

Самое простое - удалять или переименовывать обработанные файлы.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Как возобновить поиск из той же папки, но не трогая первую партию файлов, через срок
    #39692662
sql2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще вариант: перенос обработанных в подпапку\другую папку
...
Рейтинг: 0 / 0
Как возобновить поиск из той же папки, но не трогая первую партию файлов, через срок
    #39692663
AdamAry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов Рустам,
новый SearchRec он начнёт в той же последовательности файлов или может пойти по другому пути?

авторА проверять (точнее пропускать) предлагают по FileName, чи как его там -
if (SearchRec.FileName = 'строка' или Pos или List.IndexOf или цикл) then пропустить
нельзя ли поподробнее, конечно было бы отлично если был бы пример как это реализовать.
...
Рейтинг: 0 / 0
Как возобновить поиск из той же папки, но не трогая первую партию файлов, через срок
    #39692665
AdamAry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,
удалять, переименовывать, переносить нельзя.
...
Рейтинг: 0 / 0
Как возобновить поиск из той же папки, но не трогая первую партию файлов, через срок
    #39692671
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AdamAryудалять, переименовывать, переносить нельзя.

Тогда обломись.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Как возобновить поиск из той же папки, но не трогая первую партию файлов, через срок
    #39692677
Фотография JayDi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Какая версия делфи-то? В нормальных и словари есть (Dictionary<string, string>), и очереди (Queue<string>). А на старых делфях и банальный StringList.IndexOf(FileName) >= 0 подойдет.
...
Рейтинг: 0 / 0
Как возобновить поиск из той же папки, но не трогая первую партию файлов, через срок
    #39692693
AdamAry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JaDi,
Delphi 10.1
...
Рейтинг: 0 / 0
Как возобновить поиск из той же папки, но не трогая первую партию файлов, через срок
    #39692701
Гирлионайльдо
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну вообще то никто не обещает что файлы останутся в той же последовательности что и раньше, так как сортировка сделает своё. По этому тебе всё равно надо собрать полный комплект TDirectory.GetFiles и заменить старое.
...
Рейтинг: 0 / 0
Как возобновить поиск из той же папки, но не трогая первую партию файлов, через срок
    #39692829
Фотография X-Cite
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А какая практическая цель этого?
Возможно необходимо совсем другое решение
...
Рейтинг: 0 / 0
Как возобновить поиск из той же папки, но не трогая первую партию файлов, через срок
    #39692842
MBo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MBo
Гость
X-CiteА какая практическая цель этого?

Социальный эксперимент: сможет ли человек, не читающий хелпов,
по подсказкам из десяти форумов выполнить тестовое задание Auslogics :)
...
Рейтинг: 0 / 0
Как возобновить поиск из той же папки, но не трогая первую партию файлов, через срок
    #39692850
Sinemurius
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Наверное стоит разделить функционал.

1 функция получает полный список всех файлов.

2 обрабатывает:


ExecutedCount := 0;
for i := 0 to FilesList.Count-1 do
begin
... Обработка файла
...
inc(ExecutedCount);
if ExecutedCount >= 20 then
begin
if MessageDlg('Продолжить ли обработку',mtConfirmation,[mbYes,mbN],0) <> mrYes
then Break;
ExecutedCount := 0;
end;
end;
...
Рейтинг: 0 / 0
Как возобновить поиск из той же папки, но не трогая первую партию файлов, через срок
    #39692875
Фотография X-Cite
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пишется обычный итератор
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
TFinder = class(TEnumerator<TSearchRec>)
  private
    FStart: Boolean;
    FSuccess: Boolean;
    FFullPath: string;
    FSearchRec: TSearchRec;
    function GetCurrent: TSearchRec;
  protected
    function DoGetCurrent: TSearchRec; override;
    function DoMoveNext: Boolean; override;
  public
    constructor Create(const aPath, aMask: string);

    property Current: TSearchRec read GetCurrent;
    function MoveNext: Boolean;
  end;


Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
{ TFinder }

constructor TFinder.Create(const aPath, aMask: string);
begin
  FFullPath := aPath + aMask;
  FStart := False;
  FSuccess := False;
end;

function TFinder.DoGetCurrent: TSearchRec;
begin
  Exit(GetCurrent());
end;

function TFinder.DoMoveNext: Boolean;
begin
  Exit(MoveNext());
end;

function TFinder.GetCurrent: TSearchRec;
begin
  Exit(FSearchRec);
end;

function TFinder.MoveNext: Boolean;
begin
  if not FStart then
  begin
    FSuccess := FindFirst(FFullPath, faAnyFile - faVolumeID - faDirectory - faHidden - faSysFile - faArchive, FSearchRec) = 0;
    FStart := True;
  end
  else
  begin
    FSuccess := FindNext(FSearchRec) = 0;
    if not FSuccess then
      FindClose(FSearchRec);
  end;
  Exit(FSuccess);
end;


Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
procedure TForm1.Button1Click(Sender: TObject);
var
  Counter: Int32;
begin
  Counter := 0;
  while FFinder.MoveNext() and (Counter < 3) do
  begin
    Memo1.Lines.Add(FFinder.Current.Name);
    Inc(Counter);
  end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  FFinder := TFinder.Create('C:\', '*.*');
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  FreeAndNil(FFinder);
end;

...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Как возобновить поиск из той же папки, но не трогая первую партию файлов, через срок
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]