Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.02.2011, 01:53   #1
Don Karleone
Форумчанин
 
Регистрация: 05.04.2010
Сообщений: 410
По умолчанию Получить каталоги, расположенные на диске С:\

Добрый вечер уважаемые форумчане. Мне необходимо в TreeView создать дерево каталогов диска C:\. Я делаю следующим образом:
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
  sr: TSearchRec;
  at: integer;
begin
//  TreeView1.SortType:=stNone;
  at:=faDirectory;  

  if FindFirst('C:\*.*', at, sr) = 0
    then
        begin
          repeat
              TreeView1.Items.AddChild(TreeView1.Items[0], sr.Name);
          until FindNext(sr) <> 0;
          FindClose(sr);
        end;

//  TreeView1.SortType:=stText;
end;
но помимо каталогов, добавляются еще такие файлы как Autoexec.bat, x.bmp, config.sys. Что не так? Как мне избавиться от этих файлов? Мне нужны только коталоги?
ICQ: 593-013-807
Don Karleone вне форума Ответить с цитированием
Старый 19.02.2011, 02:00   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

а кто мешает проверять аттрибуты найденого файла?
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 19.02.2011, 02:03   #3
Don Karleone
Форумчанин
 
Регистрация: 05.04.2010
Сообщений: 410
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
а кто мешает проверять аттрибуты найденого файла?
по подробнее можно? я просто в этом новичек.

вот немного изменил свой код, вроде все заработало, только код я взял из delphiworld
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
  sr: TSearchRec;
  at: integer;
begin
//  TreeView1.SortType:=stNone;
  at:=faAnyFile;

  if FindFirst('C:\*.*', at, sr) = 0
    then
        begin
          repeat
          if ((sr.Attr and faDirectory) = faDirectory) and
           (sr.Name <> '.') and
           (sr.Name <> '..') then
              TreeView1.Items.AddChild(TreeView1.Items[0], sr.Name);
          until FindNext(sr) <> 0;
          FindClose(sr);
        end;

//  TreeView1.SortType:=stText;
end;
кто-нибудь объясните плиз, что значат эти строки
Код:
((sr.Attr and faDirectory) = faDirectory) and
           (sr.Name <> '.') and
           (sr.Name <> '..')
ICQ: 593-013-807

Последний раз редактировалось Don Karleone; 19.02.2011 в 02:12.
Don Karleone вне форума Ответить с цитированием
Старый 19.02.2011, 02:14   #4
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
((sr.Attr and faDirectory) = faDirectory) and//проверяем что найденный файл это папка
(sr.Name <> '.') and//отсекаем папку . (эта же папка)
(sr.Name <> '..')//отсекаем папку .. (папка на уровне выше)
про первую строчку я и говорил
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 19.02.2011, 02:19   #5
Don Karleone
Форумчанин
 
Регистрация: 05.04.2010
Сообщений: 410
По умолчанию

с атрибутами вроде разобрался немного ). Не очено понятно с этими строками
Цитата:
(sr.Name <> '.') and//отсекаем папку . (эта же папка)
(sr.Name <> '..')//отсекаем папку .. (папка на уровне выше)
буду разбираться
ICQ: 593-013-807
Don Karleone вне форума Ответить с цитированием
Старый 19.02.2011, 02:30   #6
ArtGrek
DelphiProger
Участник клуба
 
Аватар для ArtGrek
 
Регистрация: 14.11.2010
Сообщений: 1,023
По умолчанию

когда rar открываеш, там видел 2 точки, ето
Цитата:
(sr.Name <> '..')//отсекаем папку .. (папка на уровне выше)
а вот ето и мне не понятно, что значит (эта же папка)
Цитата:
(sr.Name <> '.') and//отсекаем папку . (эта же папка)
здесь мы ето не устанавливаем?
Цитата:
((sr.Attr and faDirectory) = faDirectory) and//проверяем что найденный файл это папка
VirusN13
ArtGrek вне форума Ответить с цитированием
Старый 19.02.2011, 03:03   #7
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

Цитата:
а вот ето и мне не понятно, что значит (эта же папка)
.\ используется для обозначения текущей директории.

artemavd: для цитирования есть специальный тэг. Не надо изобретать велосипед, оформляй правильно посты.
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."

Последний раз редактировалось artemavd; 19.02.2011 в 20:16.
veniside вне форума Ответить с цитированием
Старый 19.02.2011, 03:28   #8
ArtGrek
DelphiProger
Участник клуба
 
Аватар для ArtGrek
 
Регистрация: 14.11.2010
Сообщений: 1,023
По умолчанию

Код:
a
 b
  c
ищем в b
((sr.Attr and faDirectory) = faDirectory) ето c
(sr.Name <> '.') ето не та папка в которои ишем b = '.'
(sr.Name <> '..') ето не та папка выхода из b в, получаеца ето a = '..'
я верно понял?
VirusN13
ArtGrek вне форума Ответить с цитированием
Старый 19.02.2011, 12:11   #9
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
я верно понял?
если я Вас понял верно, тогда Вы поняли неверно!

поясню.
В любой папке (кроме корня диска есть служебная папка с именем .. (т.е. имя папки две точки подряд. Это ссылка на родительскую папку.
Запустите любой файловый командер, например Far Commander (или, банально, Пуск - Программы- Стандартные - Коммандная строка.
Перейтите через CD в любую папку (только не корневую)
и наберите там
Код:
dir .. /w
и посмотрите, что Вам будет выведено. (будет выведено содержимое родительской папки

А имя "." это ссылка на текущую папку. Т.е. это та папка, в который Вы сейчас находитесь.

Обычно эти служебные папки не нужны, поэтому их в коде и отбрасывают.

p.s. Найти Вам ссылку, где можно прочитать о файловой системе?
Serge_Bliznykov вне форума Ответить с цитированием
Старый 19.02.2011, 14:48   #10
ArtGrek
DelphiProger
Участник клуба
 
Аватар для ArtGrek
 
Регистрация: 14.11.2010
Сообщений: 1,023
По умолчанию

Цитата:
если я Вас понял верно, тогда Вы поняли неверно!
вы об етом?
Цитата:
(sr.Name <> '..') ето не та папка выхода из b в, получаеца ето a = '..'
Это ссылка на родительскую папку.
родительскую для кого? если для b, то значит ето a, я понял верно
VirusN13
ArtGrek вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Специальные каталоги Бутаков_Сергей Общие вопросы Delphi 2 07.12.2009 07:30
Вычислить сумму элементов матрицы, расположенные на главной диагонали и выше нее MariyaVo Паскаль, Turbo Pascal, PascalABC.NET 9 10.05.2009 21:19
ПОЛУЧИТЬ ВСЕ СИМВОЛЫ, РАСПОЛОЖЕННЫЕ МЕЖДУ ПЕРВОЙ И ПОСЛЕДНЕЙ ТОЧКАМИ MMARKIN Паскаль, Turbo Pascal, PascalABC.NET 7 13.04.2009 09:48
Каталоги в TreeView Airou Общие вопросы Delphi 27 03.12.2008 22:31
Получить сообщение о новом диске Comer_Jus Общие вопросы Delphi 2 11.08.2008 15:26