Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / как собрать в массив имена файлов по опред маске / 6 сообщений из 6, страница 1 из 1
30.10.2003, 09:59
    #32309840
Anonimus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как собрать в массив имена файлов по опред маске
Help Народ подскажите как собрать в массив имена файлов из каталога по определенной маске?
...
Рейтинг: 0 / 0
30.10.2003, 10:33
    #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
31.10.2003, 12:52
    #32311641
Anonimus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как собрать в массив имена файлов по опред маске
А попроще как?
...
Рейтинг: 0 / 0
31.10.2003, 13:22
    #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
03.11.2003, 09:30
    #32313051
Song
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как собрать в массив имена файлов по опред маске
Попроще FindFirst / FindNext / FindClose
...
Рейтинг: 0 / 0
03.11.2003, 10:37
    #32313150
ziktuw
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как собрать в массив имена файлов по опред маске
TFileListBox - этот самый массив.
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / как собрать в массив имена файлов по опред маске / 6 сообщений из 6, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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