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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 01.09.2010, 22:20   #1
Shouldercannon
Участник клуба Подтвердите свой е-майл
 
Аватар для Shouldercannon
 
Регистрация: 26.01.2008
Сообщений: 1,897
Вопрос Вывод содержимого папки

Посмотрел на форуме и в инете способы вывода содержимого папки. Все они работают на что-то одно (только вывод файлов или вывод каталогов), но не нашёл ни одного, который выводил бы всё сразу. Может у кого есть примеры?
Shouldercannon вне форума Ответить с цитированием
Старый 01.09.2010, 22:37   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Вы не правы.
На форуме такие вопросы решались неоднократно.
обыкновенный FindFirst легко решает Вашу задачу.

вот, за пять минут "на коленке" набросал...

Код:
program Project2;
{$APPTYPE CONSOLE}
uses SysUtils;

var
  Dir : String;
  SearchRec: TSearchRec;
begin
  WriteLn;
  Write('What''s directory need dir ? ');
  Readln(Dir);

  Dir := IncludeTrailingBackslash(Dir);

  if FindFirst(Dir + '*.*', faAnyFile, SearchRec) = 0 then
    repeat
      if (SearchRec.Attr and faDirectory) <> 0 then begin
        if (SearchRec.name <> '.') and (SearchRec.name <> '..') then
           WriteLn(Dir + SearchRec.name,'  <DIR>  ')
      end
      else
         WriteLn(Dir + SearchRec.name,' ',SearchRec.Size);
    until FindNext(SearchRec) <> 0;
  FindClose(SearchRec);
end.

Последний раз редактировалось Serge_Bliznykov; 01.09.2010 в 22:45.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 01.09.2010, 22:38   #3
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

FindFirstFile + FindNextFile и вперед с песней
BOBAH13 вне форума Ответить с цитированием
Старый 02.09.2010, 00:42   #4
Shouldercannon
Участник клуба Подтвердите свой е-майл
 
Аватар для Shouldercannon
 
Регистрация: 26.01.2008
Сообщений: 1,897
По умолчанию

Код:
var
  searchResult: TSearchRec;
begin
  Memo1.Clear;

  SetCurrentDir(Edit1.Text);

  if FindFirst('*.*', faAnyFile, searchResult) = 0 then
    begin
      repeat
      Memo1.Lines.Add(searchResult.Name);
      until FindNext(searchResult) <> 0;

      // Должен освободить ресурсы, используемые этими успешными, поисками
      FindClose(searchResult);
    end;
Shouldercannon вне форума Ответить с цитированием
Старый 02.09.2010, 05:41   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

1) не очень корректно!
У Вас FindClose Выполнится только если найдётся хоть один файл. Зачем Вы его внесли внутрь проверки?!

2) у Вашей программы сильный побочный эффект - она меняет текущий каталог.
А вот объясните ЗАЧЕМ делать указанную в Edit1 папку текущей?!
написать так и проще и надёжнее:
Код:
if FindFirst(IncludeTrailingBackslash(Edit1.Text)+'*.*', faAnyFile, searchResult) = 0 then
3) а где проверка на то, что в Edit1 может быть написана несуществующая папка?!


p.s. Впрочем, если Вас Ваш код удовлетворяет, то я за Вас рад!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 02.09.2010, 12:32   #6
Shouldercannon
Участник клуба Подтвердите свой е-майл
 
Аватар для Shouldercannon
 
Регистрация: 26.01.2008
Сообщений: 1,897
По умолчанию

1. Вожможно. Пример брал с сайта и не очень вник в суть. Подскажите пожалуйста как будет правельно.
2. Спасибо за поправку
3.
Код:
                  if DirectoryExists(RCText1) then
                    begin
                      if FindFirst(IncludeTrailingBackslash(Edit1.Text) + '*.*', faAnyFile, searchResult) = 0 then
                        begin
                          repeat
                          Browse.Add(searchResult.Name);
                          until FindNext(searchResult) <> 0;

                          // Должен освободить ресурсы, используемые этими успешными, поисками
                          FindClose(searchResult);
                        end;
                    end;

Последний раз редактировалось Shouldercannon; 02.09.2010 в 12:35.
Shouldercannon вне форума Ответить с цитированием
Старый 02.09.2010, 12:46   #7
Grag
А может и не...
Участник клуба
 
Аватар для Grag
 
Регистрация: 27.03.2010
Сообщений: 1,269
По умолчанию

Хоцца сделать маленькое уточнение по поводу функции IncludeTrailingBackslash ( const S: string ): string;

Взято из справочника по функциям...
III. ФУНКЦИИ И ПРОЦЕДУРЫ ДЛЯ РАБОТЫ С ФАЙЛАМИ

4. Функции и процедуры для работы с именем файла
Функция IncludeTrailingBackslash ( const S: string ): string;
== Данная функция поддерживается только в Delphi 5 ==

Модуль: SysUtils
Перемешивай дело с бездельем и не сойдешь с ума...
Grag вне форума Ответить с цитированием
Старый 02.09.2010, 13:05   #8
Shouldercannon
Участник клуба Подтвердите свой е-майл
 
Аватар для Shouldercannon
 
Регистрация: 26.01.2008
Сообщений: 1,897
По умолчанию

Исходя из выше написанного функцию IncludeTrailingBackslash ( const S: string ): string; бесмысленно использовать в Delphi 7 и выше.
Shouldercannon вне форума Ответить с цитированием
Старый 02.09.2010, 13:21   #9
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Исходя из выше написанного
Не исходи оттудова. Исходи и того что попробуешь
Цитата:
Данная функция поддерживается только в Delphi 5
Ложь и провокация:
Код:
program Project1;

{$APPTYPE CONSOLE}

uses
  SysUtils;

begin
 writeln(IncludeTrailingBackslash('c:\temp'));readln;
end.
Проверено на D2010 и D6. Результат:
Цитата:
c:\temp\
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 02.09.2010, 13:30   #10
Grag
А может и не...
Участник клуба
 
Аватар для Grag
 
Регистрация: 27.03.2010
Сообщений: 1,269
По умолчанию

Если честно, то сам не проверял, просто написал то, что видел лично в справочнике. Если не так, то уж извините великодушно, плиз!!!
Перемешивай дело с бездельем и не сойдешь с ума...
Grag вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
вывод содержимого street-walker Помощь студентам 1 04.03.2010 21:03
вывод содержимого папки [delphi] [Smarik] Помощь студентам 4 12.03.2008 14:30
Нужна программа для удаления содержимого папки DNK1980 Фриланс 6 11.02.2008 16:52
Запретить просмотр содержимого папки AidarBik Общие вопросы Delphi 2 19.12.2007 17:57