powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / FindFirst и несколько имен файлов
10 сообщений из 10, страница 1 из 1
FindFirst и несколько имен файлов
    #39778292
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть список файлов через разделитель, например, "1.jpg|1.png|1.jpeg".
Как правильно функции FindFirst подсказать, что нужно искать только такие файлы? Т.е. не просто маска, а список имён файлов?
Или же искать всё подряд, а уже потом проверять SearchRec.name?
...
Рейтинг: 0 / 0
FindFirst и несколько имен файлов
    #39778295
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11Или же искать всё подряд, а уже потом проверять SearchRec.name?
Да.
...
Рейтинг: 0 / 0
FindFirst и несколько имен файлов
    #39778311
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: pascal
1.
1.*
...
Рейтинг: 0 / 0
FindFirst и несколько имен файлов
    #39778312
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я про список конкретных имён.
Мало того, это же будет действовать и на имена папок? А мне нужен вложенный поиск.
...
Рейтинг: 0 / 0
FindFirst и несколько имен файлов
    #39778321
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Логика страдает. Сначала нужно искать только файлы, а теперь ещё и папки для рекурсии
...
Рейтинг: 0 / 0
FindFirst и несколько имен файлов
    #39778323
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну не логика, а я неправильно описал проблему изначально.
...
Рейтинг: 0 / 0
FindFirst и несколько имен файлов
    #39778330
Фотография X-Cite
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11Есть список файлов через разделитель, например, "1.jpg|1.png|1.jpeg".
Как правильно функции FindFirst подсказать, что нужно искать только такие файлы? Т.е. не просто маска, а список имён файлов?
Или же искать всё подряд, а уже потом проверять SearchRec.name?
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
var
  Search: string;
  List: TList<string>;
  Files: TStringDynArray;
begin
  Search := '1.jpg|1.png|1.jpeg';

  List := TList<string>.Create();
  try
    List.AddRange(Search.Split(['|']));
    Files := TDirectory.GetFiles('e:\Downloads\', '*', TSearchOption.soAllDirectories,
      function(const Path: string; const SearchRec: TSearchRec): Boolean
      begin
        Exit(List.IndexOf(SearchRec.Name) >= 0);
      end
    );
  finally
    List.Free();
  end;
  // в Files - лежат нужные файлы.
...
Рейтинг: 0 / 0
FindFirst и несколько имен файлов
    #39778332
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X-Cite, спасибо.

Но мне по ходу действа нужно не просто получить список, а что-то с ними делать, например, переименовывать и куда-то копировать.
Поэтому мой код такой:

Код: 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.
Procedure TForm1.GetDocs(Dir: String);
Var
 SearchRec: TSearchRec;
 sNewFileName: string;
begin
 try
   if Dir <> '' then Dir := IncludeTrailingPathDelimiter(Dir);
   if FindFirst(Dir + '*.*', faAnyFile, SearchRec) = 0 then
     repeat
       if (SearchRec.name='.') or
          (SearchRec.name='..') or
          (AnsiUpperCase(SearchRec.name) = '') then continue;
       if ((SearchRec.Attr and faDirectory) <> 0) then
         GetDocs(Dir + SearchRec.name) //we found Directory: "Dir+SearchRec.name"
       else
       begin
         if sFilesList.Contains(SearchRec.Name) then
         begin
           sNewFileName := StringReplace(dir, PathDelim, '-',  [rfReplaceAll]);
           sNewFileName := StringReplace(sNewFileName, DriveDelim, '',  [rfReplaceAll]);
           sNewFileName := sNewFileName + ExtractFileExt(SearchRec.Name);

           if FileExists(edWorkDir.Text + sNewFileName) then
             DeleteFile(edWorkDir.Text + sNewFileName);

           CopyFile(PChar(dir + SearchRec.Name), PChar(edWorkDir.Text + sNewFileName), False);
           FilesList.Add(dir + SearchRec.Name, edWorkDir.Text + sNewFileName);
           memoLog.Lines.Add(Dir + SearchRec.name + ' => ' + edWorkDir.Text + sNewFileName);
         end;

       end;
     until FindNext(SearchRec) <> 0;

 finally
   FindClose(SearchRec);
 end;
end;
...
Рейтинг: 0 / 0
FindFirst и несколько имен файлов
    #39778334
Фотография X-Cite
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11X-Cite, спасибо.
Но мне по ходу действа нужно не просто получить список, а что-то с ними делать, например, переименовывать и куда-то копировать.

Код: 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.
var
  Search: string;
  List: TList<string>;
  Files: TStringDynArray;
begin
  Search := '1.jpg|1.png|1.jpeg';

  List := TList<string>.Create();
  try
    List.AddRange(Search.Split(['|']));
    Files := TDirectory.GetFiles('e:\Downloads\', '*', TSearchOption.soAllDirectories,
      function(const Path: string; const SearchRec: TSearchRec): Boolean
      begin
        if List.IndexOf(SearchRec.Name) >= 0 then
        begin
          DoProcessFile(Path + SearchRec.Name); // Вызываем метод который что-то делает с файлом
          // или асинхронно
          TTask.Run(
            procedure
            begin
              DoProcessFile(Path + SearchRec.Name); // Вызываем метод который что-то делает с файлом
            end;
          );
        end;
      end
    );
  finally
    List.Free();
  end;
...
Рейтинг: 0 / 0
FindFirst и несколько имен файлов
    #39778337
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо!
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / FindFirst и несколько имен файлов
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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