Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Вывести список всех директорий, файлов и дисков

Delphi , Файловая система , Файлы

Вывести список всех директорий, файлов и дисков

Оформил: DeeCo
Автор: http://www.swissdelphicenter.ch

procedure TForm1.Button1Click(Sender: TObject);
 var
    D: PChar;
 begin
    D := 'C:\*.*';
    SendMessage(ListBox1.Handle,
                LB_DIR,
                DDL_ARCHIVE +
                DDL_DIRECTORY +
                DDL_DRIVES +
                DDL_EXCLUSIVE +
                DDL_HIDDEN +
                DDL_READONLY +
                DDL_READWRITE +
                DDL_SYSTEM,
                Integer(D));
 end;

 //Oder: 
//Or: 

procedure TForm1.Button2Click(Sender: TObject);
 var
   D: PChar;
 begin
    D := 'C:\*.*';
    ListBox2.Perform(LB_DIR,
                     DDL_ARCHIVE +
                     DDL_DIRECTORY +
                     DDL_DRIVES +
                     DDL_EXCLUSIVE +
                     DDL_HIDDEN +
                     DDL_READONLY +
                     DDL_READWRITE +
                     DDL_SYSTEM,
                     Integer(d));
 end;

Программа на Delphi, которая отображает список директорий, файлов и дисков на системе. Процедуры Button1Click и Button2Click - обработчики событий для двух кнопок в форме.

Работа кода:

  1. В процедуре Button1Click переменная D присваивается значение 'C:\*.*', которое является шаблоном wildcard, который соответствует всем файлам и директориям на диске C.
  2. Функция SendMessage вызывается для отправки сообщения в список элементов (ListBox1) с параметрами:
    • LB_DIR: Это указывает, что список элементов должен отображать список директорий.
    • DDL_ARCHIVE + DDL_DIRECTORY + DDL_DRIVES + DDL_EXCLUSIVE + DDL_HIDDEN + DDL_READONLY + DDL_READWRITE + DDL_SYSTEM: Эти флаги указывают, какие файлы и директории должны включаться в список. В этом случае включены архивы, директории, диски, эксклюзивный доступ, скрытые файлы, только для чтения файлы, файлы с возможностью чтения и записи, системные файлы.
    • Integer(D): Это указатель на переменную D, которая содержит шаблон wildcard.
  3. Процедура Button2Click аналогична процедуре Button1Click, но использует метод Perform списка элементов (ListBox2) вместо SendMessage.

Вывод - список всех директорий, файлов и дисков на системе, которые соответствуют шаблону wildcard.

Предложения по улучшению:

  • Вместо жесткого кодирования буквы диска 'C:\', используйте функцию GetCurrentDir для получения текущей рабочей директории.
  • Используйте более описательное имя переменной вместо D.
  • Рассмотрите использование рекурсивной функции для отображения всех директорий и поддиректорий, а не полагаться на шаблон wildcard.
  • Возможно, вам нужно фильтровать определенные типы файлов или директорий по их атрибутам (например, скрытые файлы).
  • Вместо использования двух отдельных кнопок и процедур, рассмотрите использование одиночной кнопки с обработчиком событий, который проверяет состояние чекбокса или радиогруппы для определения типа списка.

Альтернативное решение с рекурсивной функцией:

procedure TForm1.Button1Click(Sender: TObject);
var
  DirList: TStringList;
  DirPath: string;
begin
  DirList := TStringList.Create;
  try
    DirPath := GetCurrentDir + '\*';
    FindAllFiles(DirPath, DirList);
    ListBox1.Items.Assign(DirList);
  finally
    DirList.Free;
  end;
end;

procedure TForm1.FindAllFiles(const Directory: string; var FileList: TStringList);
var
  i: Integer;
  Files: TStringList;
begin
  Files := TStringList.Create;
  try
    Files.LoadPathName(Directory, False);
    FileList.Assign(Files);
    for i := 0 to Files.Count - 1 do
      if (Files[i].LowerCase.EndsWith('.zip', [rfMatchCase]) or
         Files[i].LowerCase.EndsWith('.rar', [rfMatchCase])) then
        FileList.Add(Files[i]);
  finally
    Files.Free;
  end;

  for i := 0 to FileList.Count - 1 do
    if DirectoryExists(ExtractFilePath(FileList[i]) + '\*') then
      FindAllFiles(ExtractFilePath(FileList[i]), FileList);
end;

Код использует процедуру FindAllFiles для рекурсивного отображения всех файлов и поддиректорий в текущей директории, а затем присваивает список к списку элементов. Функция GetCurrentDir используется для получения текущей рабочей директории, а функция DirectoryExists - для проверки существования директории перед вызовом рекурсивной функции.

В статье описывается использование процедуры в Delphi для вывода списка всех директорий, файлов и дисков на компьютере.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Файлы ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-19 13:29:56
2024-10-24 19:56:55/0.0037410259246826/0