Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Как возобновить поиск из той же папки, но не трогая первую партию файлов, через срок / 17 сообщений из 17, страница 1 из 1
23.08.2018, 20:32
    #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
23.08.2018, 20:41
    #39692641
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как возобновить поиск из той же папки, но не трогая первую партию файлов, через срок
AdamAryКак можно возобновить поиск из той же папки, но не трогая первую партию из 20 файлов,
через некоторое время по нажатию баттона?

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

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

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

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

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

Социальный эксперимент: сможет ли человек, не читающий хелпов,
по подсказкам из десяти форумов выполнить тестовое задание Auslogics :)
...
Рейтинг: 0 / 0
24.08.2018, 10:19
    #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
24.08.2018, 10:52
    #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
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Как возобновить поиск из той же папки, но не трогая первую партию файлов, через срок / 17 сообщений из 17, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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