Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Запись путей ко всем каталогам диска в текстовый файл... [D7, WinXP]


Max.66RUS ©   (2006-10-24 20:12:00) 

Подскажите пожалуйста, как реализовать следующую процедуру: нужно, чтобы пути ко всем каталогам, в т.ч. и вложенным, которые существуют на диске, записались в текстовый файл. Т.е. к примеру, если на диске С существует три папки: "1", "2" и "3". То нужно, чтобы в текстовый файл записалась следующая информация:
-
C:/1/
C:/2/
C:/3/
-

Заранее спасибо.


Джо   (2006-10-24 20:33:00) [1]

Пардон, перед FindDirsRecursively(FullName,OnFileFoundProc); вставить:
         OnFileFoundProc (FullName);


Джо   (2006-10-24 20:31:00) [2]

// Параметр коммандной строки — путь к папке
//
// Выводит список папок в стандартный вывод (можно перенаправить в файл)

program ListFiles;

{$APPTYPE CONSOLE}

uses
 Windows, SysUtils;

type
 // Прототип процедуры обратного вызова
 TOnNextFileProc = procedure (const AFileName: string);

procedure FindDirsRecursively(StartDir: string; OnFileFoundProc: TOnNextFileProc);
Var
 Sr: TSearchRec;
 FullName: string;
begin
 if FindFirst(StartDir+'*.*', faAnyFile, Sr) = 0 then
 begin
   repeat
     if (Sr.Attr and faDirectory)>0 then
     begin
       if (Sr.Name <> '.') and (Sr.Name <> '..') then
       begin
         FullName := StartDir + Sr.Name + '\';
         // рекурсивный вызов
         FindDirsRecursively(FullName,OnFileFoundProc);
       end;
     end;
   until FindNext(Sr) <> 0;
   FindClose(Sr);
 end;
end;

procedure OnNewFile (const AFileName: string);
begin
 WriteLn (AFileName)
end;

var
 Dir: string;

begin
 Dir := ParamStr(1);
 Dir := IncludeTrailingPathDelimiter(Dir);
 FindDirsRecursively(Dir,OnNewFile);

end.

Переделывай, как считаешь нужным. И не забудь, что тут с длинными (длиннее MAX_PATH) именами путей будет беда.


Наиль   (2006-10-24 20:25:00) [3]

Ответ не серьёный, но работает

procedure TForm1.Button1Click(Sender: TObject);
begin
WinExec('Cmd /c dir /s/b c:\ >c:\files.txt',SW_HIDE);
Hide;
sleep(15000);
Show;
Memo1.Lines.LoadFromFile('c:\files.txt');
end;


Наверх

Титульная страница Поиск, карта сайта Написать письмо