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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 15.07.2009, 10:34   #1
zotox
Форумчанин
 
Регистрация: 09.09.2008
Сообщений: 395
По умолчанию Вывод папок... (TSearchRec)

Как вывести список папок?(TSearchRec)
Вот накатал кусок кода... Но он не пашет почему то (зависает при нажатии на кнопку)

Код:
FindRes:=FindFirst('c:\*.*',faDirectory,SR); //Пробывал и 'c:\*'

While FindRes=0 do
  begin
   if ((SR.Attr and faDirectory)=faDirectory) then
    begin
     StringGrid1.Cells[0,i]:=SR.Name;
     FindRes:=FindNext(SR);
     i:=i+1;
     StringGrid1.RowCount:=i;
    end;
  end;
Помогайте чтоль
zotox вне форума
Старый 15.07.2009, 10:46   #2
profi
Участник клуба Подтвердите свой е-майл
 
Регистрация: 19.11.2007
Сообщений: 1,022
По умолчанию

Код:
procedure TForm1.Button1Click(Sender: TObject);

var
  sr: TSearchRec;
  FileAttrs: Integer;
begin
  StringGrid1.RowCount := 1;

  with StringGrid1 do
  begin
    RowCount := 0;

    FileAttrs := FileAttrs + faAnyFile;

    if FindFirst(С:\*.*, FileAttrs, sr) = 0 then

    begin
      repeat
        if (sr.Attr and FileAttrs) = sr.Attr then
        begin
        RowCount := RowCount + 1;
        Cells[1,RowCount-1] := sr.Name;
        Cells[2,RowCount-1] := IntToStr(sr.Size);
        end;
      until FindNext(sr) <> 0;
      FindClose(sr);
    end;
  end;
end;
Пример откопал в справке Delphi.

Последний раз редактировалось profi; 15.07.2009 в 10:51.
profi вне форума
Старый 15.07.2009, 11:03   #3
zotox
Форумчанин
 
Регистрация: 09.09.2008
Сообщений: 395
По умолчанию

Цитата:
Сообщение от profi Посмотреть сообщение
Код:
procedure TForm1.Button1Click(Sender: TObject);

var
  sr: TSearchRec;
  FileAttrs: Integer;
begin
  StringGrid1.RowCount := 1;

  with StringGrid1 do
  begin
    RowCount := 0;

    FileAttrs := FileAttrs + faAnyFile;

    if FindFirst(С:\*.*, FileAttrs, sr) = 0 then

    begin
      repeat
        if (sr.Attr and FileAttrs) = sr.Attr then
        begin
        RowCount := RowCount + 1;
        Cells[1,RowCount-1] := sr.Name;
        Cells[2,RowCount-1] := IntToStr(sr.Size);
        end;
      until FindNext(sr) <> 0;
      FindClose(sr);
    end;
  end;
end;
Пример откопал в справке Delphi.
Че то не хочет пахать (выводит все файлы/папки как обычно)
Но все равно спасибо!
zotox вне форума
Старый 15.07.2009, 11:06   #4
quit
Я есть!
Форумчанин
 
Аватар для quit
 
Регистрация: 17.02.2008
Сообщений: 318
По умолчанию

Пример из DelphiWorld...

Код:
procedure TForm1.FindFile(Dir: string);
var
  SR: TSearchRec;
  FindRes: Integer;
begin
  FindRes := FindFirst(Dir + '*.*', faAnyFile, SR);
  while FindRes = 0 do
  begin
    if ((SR.Attr and faDirectory) = faDirectory) and
      ((SR.Name = '.') or (SR.Name = '..')) then
    begin
      FindRes := FindNext(SR);
      Continue;
    end;

    // если найден каталог, то
    if ((SR.Attr and faDirectory) = faDirectory) then
    begin
      // входим в процедуру поиска с параметрами текущего каталога +
      // каталог, что мы нашли
      FindFile(Dir + SR.Name + '\\');
      FindRes := FindNext(SR);
      // после осмотра вложенного каталога мы продолжаем поиск
      // в этом каталоге
      Continue; // продолжить цикл
    end;

    ListBox1.Items.Add(SR.Name);
    FindRes := FindNext(SR);
  end;
  FindClose(SR);
end;
©Учиться, учиться и еще раз учиться!
quit вне форума
Старый 15.07.2009, 11:58   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
zotox
Смотрел в свою предидущую тему?
http://www.programmersforum.ru/showt...t=57673&page=2

Или мне эту считать кросспостом?
I'm learning to live...
Stilet вне форума
Старый 15.07.2009, 12:51   #6
zotox
Форумчанин
 
Регистрация: 09.09.2008
Сообщений: 395
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Смотрел в свою предидущую тему?
http://www.programmersforum.ru/showt...t=57673&page=2

Или мне эту считать кросспостом?
Как это? Там же просто путешествие по папкам (а там выводятся папки+файлы) Или я что-то не так говорю?

quit ок спасибо, чуть позже отпишусь получилось или нет
zotox вне форума
Старый 15.07.2009, 13:12   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Там же просто путешествие по папкам
А механизм путеществия (процедура та) и есть ответ на твой вопрос.
I'm learning to live...
Stilet вне форума
Старый 15.07.2009, 13:18   #8
zotox
Форумчанин
 
Регистрация: 09.09.2008
Сообщений: 395
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
А механизм путеществия (процедура та) и есть ответ на твой вопрос.
Как это? То есть ваш пост на второй странице той темы и есть ответ на мой вопрос? (Как вывести токо папки)
Да не может быть такого! Я токо что запихивал ваш код (который тода написали на второй странице)(+ менял еще что-то...) и он мне выводил файлы и папки, а мне нужны токо папки (quit, ваш код потом испытаю как я говорил )
zotox вне форума
Старый 15.07.2009, 13:27   #9
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

на ровном месте проблему раздули..
zotox, если Вам нужно вывести папки только из текущего каталога (не обрабатывая вложенные подкаталоги) и Вам понятен Ваш код из поста #1
то, чтобы он работал, достаточно переход на следующий элемент вынести за проверку на каталог (у Вас он происходит только для папок, встречается любой файл и всё - "висяк"...:
Код:
FindRes:=FindFirst('c:\*.*',faDirectory,SR); //Пробывал и 'c:\*'

While FindRes=0 do
  begin
   if ((SR.Attr and faDirectory)=faDirectory) then
    begin
     StringGrid1.Cells[0,i]:=SR.Name;
     i:=i+1;
     StringGrid1.RowCount:=i;
    end;
    FindRes:=FindNext(SR);
  end;
Serge_Bliznykov вне форума
Старый 15.07.2009, 13:31   #10
zotox
Форумчанин
 
Регистрация: 09.09.2008
Сообщений: 395
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
на ровном месте проблему раздули..
zotox, если Вам нужно вывести папки только из текущего каталога (не обрабатывая вложенные подкаталоги) и Вам понятен Ваш код из поста #1
то, чтобы он работал, достаточно переход на следующий элемент вынести за проверку на каталог (у Вас он происходит только для папок, встречается любой файл и всё - "висяк"...:
Код:
FindRes:=FindFirst('c:\*.*',faDirectory,SR); //Пробывал и 'c:\*'

While FindRes=0 do
  begin
   if ((SR.Attr and faDirectory)=faDirectory) then
    begin
     StringGrid1.Cells[0,i]:=SR.Name;
     i:=i+1;
     StringGrid1.RowCount:=i;
    end;
    FindRes:=FindNext(SR);
  end;
Огромное спасибо! Уяснил свою ошибку! Тему можно удалять!
zotox вне форума
Закрытая тема


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите разобраться с TSearchRec Jupiter Общие вопросы Delphi 5 06.04.2008 13:33
Поиск папок Artificial Помощь студентам 2 16.03.2008 22:30
Дерево папок Stanislav Общие вопросы Delphi 7 11.03.2008 22:26
поиск Папок Dukalis Общие вопросы C/C++ 3 17.01.2008 20:22
Дерево папок Mikola PHP 6 24.11.2007 01:39