С Новым годом! Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
Задаватель вопросов
 Аватар для Parlepapindipon
0 / 0 / 0
Регистрация: 18.09.2020
Сообщений: 258
Записей в блоге: 13

Работа с папками

10.06.2021, 17:35. Показов 2507. Ответов 44
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день, ребят!
Мне нужно на экран вывести список папок находящиеся в диске (на компе).
Пролистал все знакомые справочники, ноль инфы про папки
Посоветуйте функции для выполнения задачки, очень выручите
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
10.06.2021, 17:35
Ответы с готовыми решениями:

работа с папками
Подскажите пожалуйста как узнать директорию папки.K примеру если папка rplserver расположена в D:\Lessons\example то приложение должно...

Работа с файлами и папками
Осуществить поиск файлов и папок Исходные данные(список файлов и папок): С:\Том\Раздел 1\01.doc C:\Том\Раздел 1\02.doc ...

работа с папками, сортировка
Есть много папок с названиями 2010.02.24-17.10.24. Как сделать сортировку в порядке возрастания и вывести на экран?

44
 Аватар для Пытливый
3763 / 2267 / 705
Регистрация: 29.05.2013
Сообщений: 9,622
10.06.2021, 17:45
Версия Delphi какая у вас? TFileOpenDialog у вас есть в палитре? Включите для него Options.fdoPickFolders и будут выбираться папки.
0
15 / 13 / 5
Регистрация: 22.07.2015
Сообщений: 251
10.06.2021, 23:32
Цитата Сообщение от Пытливый Посмотреть сообщение
Версия Delphi какая у вас? TFileOpenDialog у вас есть в палитре? Включите для него Options.fdoPickFolders и будут выбираться папки.
А по человечески не судьба сделать?
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
 
var
  searchResult : TSearchRec;
begin
  // Пробуем найти каталоги выше текущего каталога
  SetCurrentDir('..'); -текущий каталог.
 
  if FindFirst('*', faDirectory, searchResult) = 0 then   
// function FindFirst ( const FileMask : string; Attributes : Integer; var SearchResult : TSearchRec ) : Integer;
  begin
    repeat
      //Если каталог.
      if (searchResult.attr and faDirectory) = faDirectory
        then 
          begin
             //наполнение списка.
            ShowMessage('Directory = '+searchResult.Name);
          end;
    until FindNext(searchResult) <> 0;
    //Освобождение ресурсов.
    FindClose(searchResult);
  end;
end;
1
пофигист широкого профиля
4769 / 3204 / 862
Регистрация: 15.07.2013
Сообщений: 18,609
11.06.2021, 01:45
Цитата Сообщение от Setix Посмотреть сообщение
А по человечески не судьба сделать?
Сегодня "по человечески" стоит использовать класс TDirectory и его метод GetDirectories. Не зря же люди старались его придумать и реализовать.
2
15 / 13 / 5
Регистрация: 22.07.2015
Сообщений: 251
11.06.2021, 12:15
Цитата Сообщение от northener Посмотреть сообщение
Сегодня "по человечески" стоит использовать класс TDirectory и его метод GetDirectories. Не зря же люди старались его придумать и реализовать
Мои способ позволяет искать не только папки, но и файлы, если это будет нужно)). Да и класс TDirectory появился только с XE2, если человек программирует на Delphi 7 он его не найдет.

Добавлено через 3 минуты
Большинство учебных заведений живет в прошлом десятилетии и использует Delphi 7.
0
Модератор
 Аватар для D1973
9908 / 6445 / 2455
Регистрация: 21.01.2014
Сообщений: 27,356
Записей в блоге: 3
11.06.2021, 12:34
Цитата Сообщение от Setix Посмотреть сообщение
если человек программирует на Delphi 7
А зачем он это делает? Кто его заставляет? При наличии бесплатных актуальных инструментов принципиальное использование сильно устаревшей платформы - выбор, мягко скажем, сомнительный.
Цитата Сообщение от Setix Посмотреть сообщение
Большинство учебных заведений живет в прошлом десятилетии и использует Delphi 7.
Вы хотели сказать - тысячелетии... Ну и, кстати, в этих богоспасаемых заведениях - не программируют, поэтому речь не о них.
Цитата Сообщение от Setix Посмотреть сообщение
Мои способ позволяет искать не только папки, но и файлы, если это будет нужно
Ровно как и класc TDirectory имеет метод GetFiles. Причем позволяет выполнить рекурсивный поиск одной строкой кода, в то время как Ваш код придется дорабатывать и оформлять отдельной функцией.

Добавлено через 1 минуту
Цитата Сообщение от Setix Посмотреть сообщение
Да и класс TDirectory появился только с XE2
с 2010, если память не изменяет...
0
Модератор
4115 / 2347 / 807
Регистрация: 15.11.2015
Сообщений: 9,352
11.06.2021, 12:39
Цитата Сообщение от D1973 Посмотреть сообщение
Вы хотели сказать - тысячелетии...
Вроде нет - 2002 год уже в текущем тысячелетии.
0
242 / 208 / 36
Регистрация: 19.02.2021
Сообщений: 1,431
11.06.2021, 12:43
Цитата Сообщение от D1973 Посмотреть сообщение
А зачем он это делает? Кто его заставляет? При наличии бесплатных актуальных инструментов принципиальное использование сильно устаревшей платформы - выбор, мягко скажем, сомнительный.
А что, у студентов есть выбор? Дидактический материал рассчитан на Delphi 7.
Мы в университете на первом курсе учили PL1. К счастью, ко второй половине курса перешли на Паскаль. Просто Паскаль.
Я тогда считал себя продвинутым и писал на Turbo Pascal (не на Boralnd), перерешал на нем все задачи, даже распечатал листинги и пришел такой на экзамен.
И мне было сказано, что, мол нефик выпендриваться, все ваши листинги можно засунуть в.
Потому что сказано - на Паскале, значит, на Паскале.
0
Модератор
4115 / 2347 / 807
Регистрация: 15.11.2015
Сообщений: 9,352
11.06.2021, 12:45
Цитата Сообщение от Constcat Посмотреть сообщение
Потому что сказано - на Паскале, значит, на Паскале.
А не надо было уточнять, турбо паскаль или там тормоз паскаль.
0
11.06.2021, 12:50

Не по теме:

Цитата Сообщение от AzAtom Посмотреть сообщение
А не надо было уточнять, турбо паскаль или там тормоз паскаль.
Препод посмотрел на листинг и сказал - вот это вот работать не будет, не такого в Паскале. А я такой молодой, норовистый, с понтами - что значит "не будет"??? А ну идем к компу, я покажу, что все работает!
В общем, поставил мне четверку с формулировкой "скромнее нужно быть". Зараза. Четверку. Мне. :)

0
Модератор
4115 / 2347 / 807
Регистрация: 15.11.2015
Сообщений: 9,352
11.06.2021, 12:51
Constcat, а, понятно. Ещё студент, а ведёт себя, как будто уже препод.
0
1 / 0 / 0
Регистрация: 11.06.2021
Сообщений: 49
11.06.2021, 12:51
Здравстуйте!

Setix, ваш скрипт это фуфло, выводит все файлы, я предоставлю свой скрипт.

Единственное что можно сделать:

Delphi
1
2
3
4
5
6
if FindFirst('c:\*.*', faAnyFile, sr) = 0
then repeat
     if sr.Attr and faDirectory <> 0
     then Memo1.Lines.Add(sr.Name);
     until FindNext(sr) <> 0;
FindClose(sr);
0
Модератор
4115 / 2347 / 807
Регистрация: 15.11.2015
Сообщений: 9,352
11.06.2021, 12:53
Вообще согласен, если преподу лет 55-60, из которых 15-19 лет сидит на Delphi 7, то ему скорее всего 100 лет не упёрлось ставить распоследнюю версию. А там ещё и новые страшные слова появились, FireMonkey, Android и прочее, это же изучать как бы нужно.
0
Модератор
 Аватар для D1973
9908 / 6445 / 2455
Регистрация: 21.01.2014
Сообщений: 27,356
Записей в блоге: 3
11.06.2021, 15:00
Цитата Сообщение от Constcat Посмотреть сообщение
А что, у студентов есть выбор?
А что, те, кто на форум идет с несделанной домашкой - что-то выбирают, программируют? Да не смешите.
Цитата Сообщение от IamHacker Посмотреть сообщение
ваш скрипт это фуфло
IamHacker, честное слово, Ваш - не меньшее. Ну вот что он выдаст? Все папки корневого каталога - только и всего. А вложенные? А нифига...

Добавлено через 2 минуты
Цитата Сообщение от AzAtom Посмотреть сообщение
Вроде нет - 2002 год уже в текущем тысячелетии.
А чем 7-ка от 6-ки отличается, кроме как цветными кнопками? Ничего там принципиально нового не привнесено. И только потому, что вышли эти версии достаточно быстро одна за другой, распространение получила семерка...
0
242 / 208 / 36
Регистрация: 19.02.2021
Сообщений: 1,431
11.06.2021, 15:13
Цитата Сообщение от D1973 Посмотреть сообщение
А что, те, кто на форум идет с несделанной домашкой - что-то выбирают, программируют? Да не смешите.
Я к тому, что если они принесут даже правильный проект, реализованный в какой-нибудь Delphi10, то препод их может тупо послать.
0
Модератор
4115 / 2347 / 807
Регистрация: 15.11.2015
Сообщений: 9,352
11.06.2021, 16:26
Цитата Сообщение от D1973 Посмотреть сообщение
А чем 7-ка от 6-ки отличается, кроме как цветными кнопками?
Не знаю, я 6 только 1 раз видел, минут 10. Понравилось, что прямо в самой IDE можно объекты перетаскивать с одного родителя на другой (это после D4).
0
1 / 0 / 0
Регистрация: 11.06.2021
Сообщений: 49
11.06.2021, 17:45
Цитата Сообщение от D1973 Посмотреть сообщение
IamHacker, честное слово, Ваш - не меньшее. Ну вот что он выдаст? Все папки корневого каталога - только и всего. А вложенные? А нифига...
Здравствуйте!

Но я исключил появление посторонних файлов, я сделал хоть что то лучше.
0
15 / 13 / 5
Регистрация: 22.07.2015
Сообщений: 251
11.06.2021, 19:26
Цитата Сообщение от IamHacker Посмотреть сообщение
Setix, ваш скрипт это фуфло, выводит все файлы, я предоставлю свой скрипт.
Код выводит папки, которые находятся в текущей папке. Добавить рекурсивный обход не сложно. Теперь касаемо вашего комментария:
Первое не скрипт, а код.
Второе код не мой а взят вот отсюда: http://www.delphibasics.ru/FindFirst.php
Третье
Delphi
1
 if sr.Attr and faDirectory <> 0
Вот поясните мне что это делает? У меня такое мнение, что вы не много не понимаете что это такое.
Четвертое: все что не хватало для обхода всех вложенных подпапок это рекурсивного вызова функции.

Добавлено через 6 минут
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
TSearchRec = record
     Time        : Integer;
     Size        : Integer;
     Attr        : Integer; 4 байтовое число.
     Name        : TFileName;
     ExcludeAttr : Integer;  
     FindHandle  : THandle;
     FindData    : TWin32FindData;
end;
  
{ File attribute constants }
  faReadOnly  = $00000001 platform;
  faHidden    = $00000002 platform;
  faSysFile   = $00000004 platform;
  faVolumeID  = $00000008 platform;
  faDirectory = $00000010;
  faArchive   = $00000020 platform;
  faSymLink   = $00000040 platform;
  faAnyFile   = $0000003F;
sr.Attr and faDirectory делая такую операцию, согласно битовой арифметике вы накладываете на число маску, результатом будет либо значение faDirectory, либо 0.
Delphi
1
 [if sr.Attr and faDirectory <> 0] = [if sr.Attr and faDirectory =faDirectory] они равнозначны
Добавлено через 7 минут
Delphi
1
 if FindFirst('c:\*.*', faAnyFile, sr) = 0
//1. этой строчкой вы перебираете все файлы с маской 'c:\*.*', которые хранятся в текущем каталоге
//2. faAnyFile этот показатель что вы ищите файлы (папка это частный случай файла)
Поясняю почему работает ваш код, он обходит все файлы (в которые входят и папки), отбирает все названия которые начинаются с 'C:\' т.е. обходит абсолютно каждый файл.
А вот это условие if sr.Attr and faDirectory <> 0 отбирает папки. Но с точки зрения битовой арифметики опять же сравнение не корректное. Так как компилятор приравнивает 00000000 00000000 00000000 00000000 к 0, только поэтому ваш код работает.


Добавлено через 6 минут
Delphi
1
2
3
4
5
6
7
8
9
{ File attribute constants }
  faReadOnly  = $00000001 platform; =00000001 
  faHidden    = $00000002 platform;   =00000010
  faSysFile   = $00000004 platform;    =00000100
  faVolumeID  = $00000008 platform; =00001000
  faDirectory = $00000010;                =00010000
  faArchive   = $00000020 platform;   =00100000
  faSymLink   = $00000040 platform; =01000000
  faAnyFile   = $0000003F;                 =00111111
Добавлено через 3 минуты
Прежде чем писать, что код фуфло изучите битовою арифметику, and, or и прочее.
0
1 / 0 / 0
Регистрация: 11.06.2021
Сообщений: 49
11.06.2021, 19:38
Ну, что же чём то я и не прав но я лишь переделал и усовершенствовал ваш первоначальный код который без
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
TSearchRec = record
     Time        : Integer;
     Size        : Integer;
     Attr        : Integer; 4 байтовое число.
     Name        : TFileName;
     ExcludeAttr : Integer;  
     FindHandle  : THandle;
     FindData    : TWin32FindData;
end;
  
{ File attribute constants }
  faReadOnly  = $00000001 platform; =00000001 
  faHidden    = $00000002 platform;   =00000010
  faSysFile   = $00000004 platform;    =00000100
  faVolumeID  = $00000008 platform; =00001000
  faDirectory = $00000010;                =00010000
  faArchive   = $00000020 platform;   =00100000
  faSymLink   = $00000040 platform; =01000000
  faAnyFile   = $0000003F;                 =00111111
был совершенной как бы так вырозиться 'пастой' или 'недоработкой',

Не по теме:

а напомню что я даже не программист а обычный "школьник" который с детства любил эту тему и стал уже +-

так вот, в каком то плане я добавлял строчке из 'уроков' и 'помошников' и собрал код для того что бы хоть как то улучшить ситуацию.
На счёт папок:
Обход папок лишь быстро решаемая проблема и то лично у меня был интерес в этом всём только исправить обнаружение 'файлов' а как я уже воплотил волновать не должно!
Ах ну да и решение
{ File attribute constants }
faReadOnly = $00000001 platform; =00000001
faHidden = $00000002 platform; =00000010
faSysFile = $00000004 platform; =00000100
faVolumeID = $00000008 platform; =00001000
faDirectory = $00000010; =00010000
faArchive = $00000020 platform; =00100000
faSymLink = $00000040 platform; =01000000
faAnyFile = $0000003F; =00111111
возможно взял с форума.
или концепция совпадает или вы просто загуглили что такое faDirectory.
Ах не ответил же:
Delphi
1
if sr.Attr and faDirectory <> 0
Это обрезанная проверка которую возможно я не правильно настроил!

Надеюсь вам помог
Если остались вопросы, пишите, отвечу!
0
15 / 13 / 5
Регистрация: 22.07.2015
Сообщений: 251
11.06.2021, 19:42
Delphi
1
sr.Attr and faDirectory
- вот это 32 битное (4 байтное) число, а ты сравниваешь его с 1 битным.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
11.06.2021, 19:42
Помогаю со студенческими работами здесь

Работа с каталогами (папками)
Есть папка gDir, а в ней n - количество текстовых документов *.txt, выяснить сколько в ней файлов *.txt и вывести их названя в memo. ...

Работа с текущей датой и папками
Здравствуйте. Подскажите, пожалуйста, как можно получить текущую дату в полном формате(например, 8 марта, а не 08.03)? И как эту дату...

Работа с папками
Как из моей утилиты открывать папки. Подскажите код, какие объекты использовать. Заранее спасибо!

Работа с папками
Здравствуйте! Создал папку, в свойствах безопасности добавил локального пользователя, которому дал права на чтение и запись файлов в папку....

Работа с папками
Реально ли на паскале реализовать работу с папками(их перемещение, копирование, удаление). Мне нужно перенести файлы, а перемещать по...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru