Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.01.08;
Скачать: CL | DM;

Вниз

Помогите разобраться с прохожднием всех каталогов   Найти похожие ветки 

 
Freeon   (2005-11-02 00:33) [0]

Суть в том что в определенном каталоке (C:\INF) существуют подкаталоги в них еще подкаталоги............... в каждом каталоге также имеются и файлы.
как можно записать адреса всех файлов из родительского каталога(C:\INF\) и всех дочерних каталогов
например в C:\Log.txt чтобы получилос что-то похожее на

c:\inf\kil.doc
c:\inf\atf.exe
c:\inf\exe\bpx.exe
...........................
c:\inf\..................

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


 
Плохиш ©   (2005-11-02 01:02) [1]

AssignFile/Rewrite/Write(ln)/CloseFile - работа с текстовыми файлами
FindFirst/FindNext + рекурсия - поиск файлов/каталогов в заданном каталоге
Книжки по программированию/встроенная справка - теория программирования


 
KorvinOE ©   (2005-11-02 09:52) [2]

С помощью FindFirst/FindNext находишь по порядку все объекты в папке и определяешь папка это или файл. Если файл то сохраняешь его адрес, а если каталог - выполняешь эту же ф-цию для этого каталога :)


 
Cvin   (2005-11-02 14:52) [3]


var
 fndFile,fndFolder: WIN32_FIND_DATA; // чтобы не забивать стэк

procedure FindAndSave (const StartD: String);
var
 hSRFile,hSRFolder: THandle;
 F: TextFile;
begin
 hSRFile := FindFirstFile("*.*",fndFile);
 if hSRFile <> INVALID_HANDLE_VALUE then
 begin
   CloseHandle(CreateFile("c:\IamLog.log",GENERIC_WRITE,0,nil,OPEN_ALWAYS,0,0));
   AssignFile(F,"c:\IamLog.log");
   try
     Append(F);
     try
       repeat
         if (fndFile.dwFileAttributes and FILE_ATTRIBUTE_DIRECTORY) =
           FILE_ATTRIBUTE_DIRECTORY
         then
           Continue;
         WriteLn(F,StartD+fndFile.cFileName);
       until not FindNextFile(hSRFile,fndFile);
       Windows.FindClose(hSRFile);
     finally
       CloseFile(F);
     end;
   except
     Application.MessageBox("Что-то пошло не так...","Запор при записи в файл",0);
   end;
 end;
 hSRFolder := FindFirstFile(PChar(StartD+"*.*"),fndFolder);
 if hSRFolder <> INVALID_HANDLE_VALUE then
 begin
   repeat
     if ((fndFolder.dwFileAttributes and
         FILE_ATTRIBUTE_DIRECTORY) = FILE_ATTRIBUTE_DIRECTORY) and
        (fndFolder.cFileName <> "..") and (String(fndFolder.cFileName) <> ".")
     then
       FindAndSave(StartD+fndFolder.cFileName+"\");
   until not FindNextFile(hSRFolder,fndFolder);
   Windows.FindClose(hSRFolder);
 end;      
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
 FindAndSave("c:\");
end;


 
Cvin   (2005-11-02 15:56) [4]

В предыдущем коде накосячил малость... Вот работающий пример

var
fndFile,fndFolder: WIN32_FIND_DATA;

procedure FindAndSave (const StartD: String);
var
hSRFile,hSRFolder: THandle;
F: TextFile;
begin
hSRFile := FindFirstFile(PChar(StartD+"*.*"),fndFile);
if hSRFile <> INVALID_HANDLE_VALUE then
begin
  CloseHandle(CreateFile("c:\IamLog.log",GENERIC_WRITE,0,nil,OPEN_ALWAYS,0,0));
  repeat
    if (fndFile.dwFileAttributes and FILE_ATTRIBUTE_DIRECTORY) =
      FILE_ATTRIBUTE_DIRECTORY
    then
      Continue;
    try
      AssignFile(F,"c:\IamLog.log");
      Append(F);
      try
        WriteLn(F,StartD+fndFile.cFileName);
      finally
        CloseFile(F);
      end;
    except
      Application.MessageBox("Что-то пошло не так...","Запор при записи в файл",0);
    end;
  until not FindNextFile(hSRFile,fndFile);
  Windows.FindClose(hSRFile);
end;
hSRFolder := FindFirstFile(PChar(StartD+"*.*"),fndFolder);
if hSRFolder <> INVALID_HANDLE_VALUE then
begin
  repeat
    if ((fndFolder.dwFileAttributes and
        FILE_ATTRIBUTE_DIRECTORY) = FILE_ATTRIBUTE_DIRECTORY) and
       (fndFolder.cFileName <> "..") and (String(fndFolder.cFileName) <> ".")
    then
      FindAndSave(StartD+fndFolder.cFileName+"\");
  until not FindNextFile(hSRFolder,fndFolder);
  Windows.FindClose(hSRFolder);
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
 FindAndSave("c:\"); // слэш указывать обязательно, т.к процедура не  проверяет его наличия
end;


 
wp2 ©   (2005-11-02 20:26) [5]


> Суть в том что в определенном каталоке (C:\INF) существуют
> подкаталоги в них еще подкаталоги............... в каждом
> каталоге также имеются и файлы.
> как можно записать адреса всех файлов из родительского каталога(C:
> \INF\) и всех дочерних каталогов
> например в C:\Log.txt чтобы получилос что-то похожее на

Вы бы сперва выучили такое понятие как рекурсия...


 
Freeon ©   (2005-11-02 22:42) [6]

Всем спасибо, сам пробовал,у меня получилось так

Procedure FirstScanDir(Dir:string);
var SearchRec:TSearchRec;
   f:textfile;
begin
if Dir<>"" then if Dir[length(Dir)]<>"\" then Dir:=Dir+"\";  
if FindFirst(Dir+"*.*", faAnyFile, SearchRec)=0 then
 repeat
 if (SearchRec.name=".") or (SearchRec.name="..") then continue;
 if (SearchRec.Attr and faDirectory)<>0 then
 FirstScanDir(Dir+SearchRec.name) //we found Directory
 else
  begin
  assignfile(f,"1.txt");
  If not FileExists("1.txt") then rewrite(f) else append(f);
  writeln(f,Dir+SearchRec.name);
  closefile(f);
  end;
 until FindNext(SearchRec)<>0;
FindClose(SearchRec);

end;

to wp2 из моего кода видно - я знаю, что такое рекурсия


 
wp2 ©   (2005-11-03 21:47) [7]


> to wp2 из моего кода видно - я знаю, что такое рекурсия

Так чё тогда спрашиваешь?



Страницы: 1 вся ветка

Текущий архив: 2006.01.08;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.007 c
1-1133433853
Дмитрий_05
2005-12-01 13:44
2006.01.08
ListBox убрать рамку в выделенной строке


10-1111148607
va
2005-03-18 15:23
2006.01.08
Регистрация СОМ-сервера


8-1123054206
gerl
2005-08-03 11:30
2006.01.08
Люди добрые есть у кого способ преобразования dvd в mpeg4 ?


3-1131619501
Дмитрий_Б
2005-11-10 13:45
2006.01.08
MultiSelect в Гриде


14-1134665173
_Lexus_
2005-12-15 19:46
2006.01.08
Новогодние поздравления, стихи и тосты на заказ





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский