Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / FindFirst и несколько имен файлов / 10 сообщений из 10, страница 1 из 1
23.02.2019, 16:25
    #39778292
X11
X11
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FindFirst и несколько имен файлов
Есть список файлов через разделитель, например, "1.jpg|1.png|1.jpeg".
Как правильно функции FindFirst подсказать, что нужно искать только такие файлы? Т.е. не просто маска, а список имён файлов?
Или же искать всё подряд, а уже потом проверять SearchRec.name?
...
Рейтинг: 0 / 0
23.02.2019, 16:28
    #39778295
Kazantsev Alexey
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FindFirst и несколько имен файлов
X11Или же искать всё подряд, а уже потом проверять SearchRec.name?
Да.
...
Рейтинг: 0 / 0
23.02.2019, 17:13
    #39778311
DimaBr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FindFirst и несколько имен файлов
Код: pascal
1.
1.*
...
Рейтинг: 0 / 0
23.02.2019, 17:17
    #39778312
X11
X11
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FindFirst и несколько имен файлов
Я про список конкретных имён.
Мало того, это же будет действовать и на имена папок? А мне нужен вложенный поиск.
...
Рейтинг: 0 / 0
23.02.2019, 17:53
    #39778321
DimaBr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FindFirst и несколько имен файлов
Логика страдает. Сначала нужно искать только файлы, а теперь ещё и папки для рекурсии
...
Рейтинг: 0 / 0
23.02.2019, 17:55
    #39778323
X11
X11
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FindFirst и несколько имен файлов
Ну не логика, а я неправильно описал проблему изначально.
...
Рейтинг: 0 / 0
23.02.2019, 19:30
    #39778330
X-Cite
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FindFirst и несколько имен файлов
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
23.02.2019, 19:38
    #39778332
X11
X11
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FindFirst и несколько имен файлов
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
23.02.2019, 19:48
    #39778334
X-Cite
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FindFirst и несколько имен файлов
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
23.02.2019, 20:10
    #39778337
X11
X11
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FindFirst и несколько имен файлов
Спасибо!
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / FindFirst и несколько имен файлов / 10 сообщений из 10, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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