powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / как собрать в массив имена файлов по опред маске
6 сообщений из 6, страница 1 из 1
как собрать в массив имена файлов по опред маске
    #32309840
Фотография Anonimus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Help Народ подскажите как собрать в массив имена файлов из каталога по определенной маске?
...
Рейтинг: 0 / 0
как собрать в массив имена файлов по опред маске
    #32309914
Rostyk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Взято из JclFileUtils.pas (Jedi code library, http://www.jedi-vcl.org/)

Код: plaintext
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.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
function AdvBuildFileList(const Path: string; const Attr: Integer; const Files: TStrings;
  const AttributeMatch: TJclAttributeMatch; const Options: TFileListOptions;
  const SubfoldersMask: string; const FileMatchFunc: TFileMatchFunc): Boolean;

var
  FileMask: string;
  RootDir: string;
  Folders: TStringList;
  CurrentItem: Integer;
  Counter: Integer;
  LocAttr: Integer;

  procedure BuildFolderList;
  var
    FindInfo: TSearchRec;
    Rslt: Integer;
  begin
    Counter := Folders.Count -  1 ;
    CurrentItem :=  0 ;

    while CurrentItem <= Counter do
    begin
      // searching for subfolders
      Rslt := FindFirst(Folders[CurrentItem] + '*.*', faDirectory, FindInfo);
      try
        while Rslt =  0  do
        begin
          if (FindInfo.Name <> '.') and (FindInfo.Name <> '..') and
            (FindInfo.Attr and faDirectory = faDirectory) then
            Folders.Add(Folders[CurrentItem] + FindInfo.Name + PathSeparator);

          Rslt := FindNext(FindInfo);
        end;
      finally
        FindClose(FindInfo);
      end;
      Counter := Folders.Count -  1 ;
      Inc(CurrentItem);
    end;
  end;

  procedure FillFileList(CurrentCounter: Integer);
  var
    FindInfo: TSearchRec;
    Rslt: Integer;
    CurrentFolder: String;
    Matches: Boolean;

  begin
    CurrentFolder := Folders[CurrentCounter];
    Rslt := FindFirst(CurrentFolder + FileMask, LocAttr, FindInfo);

    try
      while Rslt =  0  do
      begin
         Matches := False;

         case AttributeMatch of
           amAny: Matches := (LocAttr and FindInfo.Attr) <>  0 ;
           amExact: Matches := LocAttr = FindInfo.Attr;
           amSuperSetOf: Matches := (LocAttr and FindInfo.Attr) = FindInfo.Attr;
           amSubSetOf: Matches := (LocAttr and FindInfo.Attr) = LocAttr;
           amCustom: if @FileMatchFunc <> nil then
                       Matches := FileMatchFunc(LocAttr,  FindInfo);
         end;

         if Matches then
          if flFullNames in Options then
            Files.Add(CurrentFolder + FindInfo.Name)
          else
            Files.Add(FindInfo.Name);

        Rslt := FindNext(FindInfo);
      end;
    finally
      FindClose(FindInfo);
    end;
  end;

begin
  Assert(Files <> nil);
  FileMask := ExtractFileName(Path);
  RootDir := ExtractFilePath(Path);

  Folders := TStringList.Create;
  try
    Folders.Add(RootDir);

    if Attr = faAnyFile then
      LocAttr := faReadOnly + faHidden + faSysFile + faArchive
    else
      LocAttr := Attr;

    // here's the recursive search for nested folders

    if flRecursive in Options then
      BuildFolderList;

    for Counter :=  0  to Folders.Count -  1  do
    begin
      if (((flMaskedSubfolders in Options) and (StrMatches(SubfoldersMask,
        Folders[Counter],  1 ))) or (not (flMaskedSubfolders in Options))) then
          FillFileList(Counter);
    end;
  finally
    Folders.Free;
  end;
  Result := True;
end;
...
Рейтинг: 0 / 0
как собрать в массив имена файлов по опред маске
    #32311641
Фотография Anonimus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А попроще как?
...
Рейтинг: 0 / 0
как собрать в массив имена файлов по опред маске
    #32311725
Rostyk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
http://www.soobcha.ru/rushelp

API-функция DlgDirList
Группа ссылок: Диски, Папки и Файлы

Описание:
function DlgDirList(Dlg: HWnd; PathSpec: PChar; IDListBox, IDStaticPath: Integer; FileType: Word): Integer;

Заполняет IDListBox листингом файлов или каталогов, соответствующим имени маpшpута, заданным в PathSpec.

Паpаметpы:
Dlg: Блок диалога, содеpжащий IDListBox.

PathSpec: Стpока имени маpшpута (заканчивающаяся пустым символом).

IDListBox: Идентификатоp оpгана упpавления блока списка.

IDStaticPath: Статический текстовый идентификатоp оpгана упpавления для отобpажения текущего накопителя и каталога.

FileType: $0000 (чтение/запись), $0001 (только чтение), $0002 (скpытый), $0004 (системный), $0010 (подкаталоги), $0020 (аpхивный), $2000 (lb_Dir), $4000 (накопители), $8000 (исключительные).

Возвpащаемое значение:
Не нуль, если листинг получен; нуль - в случае невеpного маpшpута поиска.

См. также: lb_ResetContent, lb_Dir
...
Рейтинг: 0 / 0
как собрать в массив имена файлов по опред маске
    #32313051
Song
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Попроще FindFirst / FindNext / FindClose
...
Рейтинг: 0 / 0
как собрать в массив имена файлов по опред маске
    #32313150
Фотография ziktuw
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TFileListBox - этот самый массив.
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / как собрать в массив имена файлов по опред маске
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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