IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> Переполнение стека при сканировании диска
Антон Паскаль
сообщение 31.01.2012 18:47
Сообщение #1





Группа: Пользователи
Сообщений: 1
Пол: Мужской

Репутация: -  0  +


Сделал программу, которая ищет файлы по всему диску...
Конечно же стек переполняется(((
Это из-за рекурсии (вложенной процедуры). Помогите пожалуйста сделать эту процедуру динамической!! smile.gif

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 мин.

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.

 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 15.07.2025 8:06
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"