![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() |
Антон Паскаль |
![]()
Сообщение
#1
|
Группа: Пользователи Сообщений: 1 Пол: Мужской Репутация: ![]() ![]() ![]() |
Сделал программу, которая ищет файлы по всему диску...
Конечно же стек переполняется((( Это из-за рекурсии (вложенной процедуры). Помогите пожалуйста сделать эту процедуру динамической!! ![]() uses Dos, Crt; type PFind = ^TFind; TFind = object procedure Find_File(Dir,FindName : PathStr); end; var Find : PFind; Procedure TFind.Find_File(Dir,FindName : PathStr); {Поиск файлов по маске по всему диску} Procedure SearchDir(Dir : PathStr); Var SRec : SearchRec; begin {Поиск файлов по маске} if Dir[Length(Dir)] <> '\' then Dir := Dir+'\'; FindFirst(Dir + FindName, AnyFile, SRec); While DosError = 0 do begin With SRec do if Attr and (VolumeID + Directory) = 0 then WriteLn(Dir + Name); FindNext(SRec); end; {Поиск всех вложенных каталогов, в т.ч. скрытых, системных, r/o} FindFirst(Dir+'*.*', Directory or ReadOnly or Hidden or SysFile, SRec); While DosError = 0 do begin With SRec do if (Attr and Directory <> 0) and (Name[1] <> '.') then SearchDir(Dir+Name); FindNext(SRec); end; end; begin SearchDir(Dir); end; begin clrscr; New(Find); Find^.Find_File('c:\','*.pas'); Dispose(Find); readkey; end. Добавлено через 1 мин. блин...... как сделать код.....чтобы красиво было? Добавлено через 33 сек. uses Dos, Crt; type PFind = ^TFind; TFind = object procedure Find_File(Dir,FindName : PathStr); end; var Find : PFind; Procedure TFind.Find_File(Dir,FindName : PathStr); {Поиск файлов по маске по всему диску} Procedure SearchDir(Dir : PathStr); Var SRec : SearchRec; begin {Поиск файлов по маске} if Dir[Length(Dir)] <> '\' then Dir := Dir+'\'; FindFirst(Dir + FindName, AnyFile, SRec); While DosError = 0 do begin With SRec do if Attr and (VolumeID + Directory) = 0 then WriteLn(Dir + Name); FindNext(SRec); end; {Поиск всех вложенных каталогов, в т.ч. скрытых, системных, r/o} FindFirst(Dir+'*.*', Directory or ReadOnly or Hidden or SysFile, SRec); While DosError = 0 do begin With SRec do if (Attr and Directory <> 0) and (Name[1] <> '.') then SearchDir(Dir+Name); FindNext(SRec); end; end; begin SearchDir(Dir); end; begin clrscr; New(Find); Find^.Find_File('c:\','*.pas'); Dispose(Find); readkey; end. Добавлено через 8 мин.
|
![]() ![]() |
![]() |
Текстовая версия | 15.07.2025 8:06 |