Модераторы: Snowy, MetalFan, bems, Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Рекурсивный обход дерева 
:(
    Опции темы
microo10
  Дата 17.1.2013, 14:35 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 62
Регистрация: 21.1.2012

Репутация: нет
Всего: нет



Код

procedure FindFiles(const DirPath: string; Str: TStrings);
var
SR: TSearchRec;
begin
if FindFirst(DirPath + '\*.*', faAnyFile, SR) = 0 then
try
repeat
if not ((SR.Name = '.') or (SR.Name = '..')) then
begin
if SR.Attr = faDirectory then
FindFiles(DirPath + '\' + SR.Name, Str)
else
Str.Add(SR.Name);
end;
until FindNext(SR) <> 0;
finally
FindClose(SR);
end;
end;
 
procedure TForm1.Button1Click(Sender: TObject);
begin
FindFiles('C:\test', Memo1.Lines);
end;

Данный код ишет файлы во всех папках 'C:\test' ...
Помогите переделать процедуру так,что бы она воспринимала данное обращение:
Код

FindFiles('C:\A','test','txt' , Memo1.Lines);

И искала test.txt во всех папках дериктории "C:\A"

Это сообщение отредактировал(а) microo10 - 17.1.2013, 15:08
PM MAIL   Вверх
microo10
Дата 17.1.2013, 15:47 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 62
Регистрация: 21.1.2012

Репутация: нет
Всего: нет



уже решил проблему,кто подскажет как взять из строчки memo данные и записать их в разные переменные?
Пример:
Код

C:\test|*|txt

Вот из этого мне нужно записать C:\test в одну переменную,в другую * и в третью txt...
Помогите пожалуйста :(
PM MAIL   Вверх
kami
Дата 17.1.2013, 16:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1806
Регистрация: 25.8.2007
Где: Санкт-Петербург

Репутация: 22
Всего: 72



F1 + Pos, PosEx, Copy

PM MAIL WWW   Вверх
microo10
Дата 17.1.2013, 16:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 62
Регистрация: 21.1.2012

Репутация: нет
Всего: нет



Цитата(kami @ 17.1.2013,  16:05)
F1 + Pos, PosEx, Copy

А можно как нибудь попроще указать Директорию,маску имени и маску расширения в одной строчке memo?

Это сообщение отредактировал(а) microo10 - 17.1.2013, 16:18
PM MAIL   Вверх
gesper
Дата 17.1.2013, 20:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


"Shарфик"
*


Профиль
Группа: Участник
Сообщений: 183
Регистрация: 23.2.2005

Репутация: 1
Всего: 2



если мне память не изменяет достаточно написать в качестве пути
Цитата

C:\test\*.txt

Если функция не заработает, то добавь обработку выше указаной строки функциями
Код


ExtractFileDir();
ExtractFileExt();
ExtractFileName();
IncludeTrailingPathDelimiter();

http://platonov-andrei.narod.ru/Delphi/FileNameUtil.htm


Это сообщение отредактировал(а) gesper - 17.1.2013, 20:33
--------------------
...И приколется обломившийся и oбломится приколовшийся...
PM MAIL   Вверх
microo10
Дата 17.1.2013, 21:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 62
Регистрация: 21.1.2012

Репутация: нет
Всего: нет



Цитата(gesper @ 17.1.2013,  20:31)
если мне память не изменяет достаточно написать в качестве пути
Цитата

C:\test\*.txt

Если функция не заработает, то добавь обработку выше указаной строки функциями
Код


ExtractFileDir();
ExtractFileExt();
ExtractFileName();
IncludeTrailingPathDelimiter();

http://platonov-andrei.narod.ru/Delphi/FileNameUtil.htm

Я уже решил эту проблему,возникла новая..если во время поиска найдено много файлов,программа зависает :(
Помогите пожалуйста,очень срочно :(((
Код

unit Unit1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.Menus, unit2, Vcl.StdCtrls,Masks,Math,
  Vcl.ComCtrls;

type
  TForm1 = class(TForm)
    MainMenu1: TMainMenu;
    N1: TMenuItem;
    N2: TMenuItem;
    N3: TMenuItem;
    Button1: TButton;
    Button2: TButton;
    memo1: TMemo;
    Label1: TLabel;
    procedure N3Click(Sender: TObject);
    procedure N2Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  Size_file:integer;

implementation

{$R *.dfm}

procedure FindFiles(StartFolder, Mask: string; List: TStrings;
  ScanSubFolders: Boolean = True);
var
  SearchRec: TSearchRec;
  FindResult: Integer;
begin
  List.BeginUpdate;
  try
    StartFolder := IncludeTrailingBackslash(StartFolder);
    FindResult := FindFirst(StartFolder + '*.*', faAnyFile, SearchRec);
    try
      while FindResult = 0 do
        with SearchRec do
        begin
          if (Attr and faDirectory) <> 0 then
          begin
            if ScanSubFolders and (Name <> '.') and (Name <> '..') then
              FindFiles(StartFolder + Name, Mask, List, ScanSubFolders);
          end
          else
          begin
            if MatchesMask(Name, Mask) then
              List.Add(StartFolder + Name);
              Size_file:=size_file+SearchRec.Size;
          end;
          FindResult := FindNext(SearchRec);
        end;
    finally
      FindClose(SearchRec);
    end;
  finally
    List.EndUpdate;
  end;
    end;

procedure TForm1.Button1Click(Sender: TObject);
var
i,n:integer;
direct,mack:string;
strok:WideString;
s_f:real;
begin
memo1.Clear;
for i := 0 to Form2.Memo1.Lines.Count - 1  do begin  //циклим i от мин.строки мемо до макс.
Strok:=Form2.Memo1.Lines[i];
direct:=copy(Strok,1,pos('|',Strok)-1); //директория->строка[i]
Delete(Strok,1,pos('|',Strok));
mack:=copy(Strok,1,pos('|',Strok)-1);
FindFiles(direct, mack, memo1.Lines, true);//ищем файлы
S_f:=RoundTo(size_file/(1024*1024), -2);
Label1.caption:=floattostr(S_f)+' мб';
end;
Button2.enabled:=true;
end;

procedure TForm1.Button2Click(Sender: TObject);
var
i:integer;
f:string;
begin
for i := 0 to Memo1.Lines.Count - 1  do begin //циклимся от 0 до последней строки
F:=Memo1.Lines[i]; //подключяем номера строки из цикла
DeleteFile(f);//удаляем файл
end;
Button2.enabled:=false;
memo1.Clear;
label1.caption:='';
showmessage('Файлы успешно удалены!');
end;

end.


Формирование строк мемо:
Код

Директория|Название|Расширение  

 smile 
PM MAIL   Вверх
gesper
Дата 17.1.2013, 21:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


"Shарфик"
*


Профиль
Группа: Участник
Сообщений: 183
Регистрация: 23.2.2005

Репутация: 1
Всего: 2



Варианта два:

1) Она зависает встав в цикл. - Ищи ошибку.

2) Она работает, а ты думаешь что висит.

Код

делай progressbar

и ставь в цикл Application.ProcessMessages();


Это сообщение отредактировал(а) gesper - 17.1.2013, 21:43
--------------------
...И приколется обломившийся и oбломится приколовшийся...
PM MAIL   Вверх
microo10
Дата 17.1.2013, 21:44 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 62
Регистрация: 21.1.2012

Репутация: нет
Всего: нет



Цитата(gesper @ 17.1.2013,  21:42)
Варианта два:

1) Она зависает встав в цикл. - Ищи ошибку.

2) Она работает, а ты думаешь что висит.

Код

делай progressbar

и ставь в цикл Application.ProcessMessages();

Да она работает,но вин пишет типо не отвечает,а потом через пару мин все файлы выводит :(
А как прогрес присобачить? А то не работал с ним :(

Добавлено через 13 минут и 11 секунд
При добавлении  Application.ProcessMessages(); программа живет,но не выполняет свои функции... 

Это сообщение отредактировал(а) microo10 - 17.1.2013, 21:46
PM MAIL   Вверх
gesper
Дата 17.1.2013, 23:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


"Shарфик"
*


Профиль
Группа: Участник
Сообщений: 183
Регистрация: 23.2.2005

Репутация: 1
Всего: 2



Цитата


При добавлении  Application.ProcessMessages(); программа живет,но не выполняет свои функции... 



Яндекс тебе в помощь, читай описание функции.

Последняя подсказка, дальше сам колупайся, раз ленишся узнать как работает функция.
Код


for i := 0 to Memo1.Lines.Count - 1  do begin //циклимся от 0 до последней строки
F:=Memo1.Lines[i]; //подключяем номера строки из цикла
DeleteFile(f);//удаляем файл
[B]Label1.Caption:='Удалено файлов:'+inttostr(i);
ProgressBar1.Position:=i;
Application.ProcessMessages();
end;


--------------------
...И приколется обломившийся и oбломится приколовшийся...
PM MAIL   Вверх
northener
Дата 18.1.2013, 00:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1361
Регистрация: 2.9.2010

Репутация: 12
Всего: 20



Цитата(microo10 @  17.1.2013,  21:44 Найти цитируемый пост)
При добавлении  Application.ProcessMessages(); программа живет,но не выполняет свои функции... 

Покажи как ты эту процедуру применил в своём коде.


--------------------
Но только лошади летают вдохновенно.
Иначе лошади разбились бы мгновенно!
PM MAIL   Вверх
microo10
Дата 18.1.2013, 08:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 62
Регистрация: 21.1.2012

Репутация: нет
Всего: нет



Цитата(northener @ 18.1.2013,  00:21)
Цитата(microo10 @  17.1.2013,  21:44 Найти цитируемый пост)
При добавлении  Application.ProcessMessages(); программа живет,но не выполняет свои функции... 

Покажи как ты эту процедуру применил в своём коде.

Уже разобрался,не в тот цикл вставил)
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0534 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.