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

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

Список файлов и папок. [D7]


Nikfel ©   (2007-09-27 13:48:00) 

Подскажите пожалуйста. Как получить список папок и вывести в memo1, и получит список файлов и вывести в memo2. Мне только нужно получить список файлов или папок. Желательно бы найти самый быстрый вариант. Заранее спасибо.


Kolan   (2007-09-27 18:02:00) [1]

> А сам как думаешь? :)


> И абсолютно без разницы

Короче проверил:
property Strings: TStrings read GetStrings write SetStrings;
Работает…

Хм…, странно, откруда тогда у меня эта паранойа.


Джо   (2007-09-27 17:55:00) [2]

И абсолютно без разницы, где этот объект находится, в локальном var или возвращается методом-аксессором.


Джо   (2007-09-27 17:54:00) [3]

2 Kolan ©
Ты ведь просто передаешь ссылку на объект. Ничего никуда не присваивается. :)


Kolan   (2007-09-27 16:21:00) [4]

> Адрес метода от адреса «данных» отличаешь?

Ну вот, вот у меня и запало что так не получится :)


{RASkov}   (2007-09-27 16:20:00) [5]

> [15] Kolan ©   (27.09.07 16:11)
> GetLines write SetLines;
>
> Ругалось бы?

А сам как думаешь? :)
Адрес метода от адреса "данных" отличаешь?


Kolan   (2007-09-27 16:11:00) [6]

> А где там assignment? :)

Ну я знаю…

А если бы было так:
property Lines: TStrings read GetLines write SetLines;

Ругалось бы?


{RASkov}   (2007-09-27 16:03:00) [7]

> [11] Kolan ©   (27.09.07 15:35)
> странно…

Ничего странного нет.... так как
procedure TPluginLoader.ScanDirectory(....: Boolean; Strings: TStrings; Extension: string.....)
всего лишь указатель....
А смотрим
TCustomMemo = class(TCustomEdit)
.....
property Lines: TStrings read FLineswrite SetLines;


> что-то типа Left side cannot be assigend…

Это немного не из этой оперы....


Джо   (2007-09-27 15:57:00) [8]

> [11] Kolan ©   (27.09.07 15:35)
> > А разве не так?
>
> Хм, и так можно… Почему же я был уверен что он ругнется
> что-то типа Left side cannot be assigend… странно…

А где там assignment? :)


{RASkov}   (2007-09-27 15:54:00) [9]

> [10] Reindeer Moss Eater ©   (27.09.07 15:29)

А вдруг ему Мемо критично... :)
Ладно... я ему тоже приготовил нечто такое:
procedure GetFileDir(LsFile, LsDir: TCustomListBox; const APath: String);
begin
 LsFile.Perform(LB_DIR, 0, LPARAM(PChar(APath)));
 LsDir.Perform(LB_DIR, DDL_EXCLUSIVE or DDL_DIRECTORY, LPARAM(PChar(APath)));
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
 GetFileDir(ListBox1, ListBox2, 'C:\Temp\*.*');
end;


В справке по DlgDirList есть инфа по параметрам DDL_xxx.....


Kolan   (2007-09-27 15:35:00) [10]

> А разве не так?

Хм, и так можно… Почему же я был уверен что он ругнется что-то типа Left side cannot be assigend… странно…


Reindeer Moss Eater   (2007-09-27 15:29:00) [11]

SendMessage(ListBox1.Handle,
               LB_DIR,
               DDL_ARCHIVE +
               DDL_DIRECTORY +
               DDL_DRIVES +
               DDL_EXCLUSIVE +
               DDL_HIDDEN +
               DDL_READONLY +
               DDL_READWRITE +
               DDL_SYSTEM,
               Integer(PChar('C:\*.*'))
               );


Джо   (2007-09-27 15:15:00) [12]

> [6] {RASkov} ©   (27.09.07 15:13)

О, не один я шибко умный :)


Джо   (2007-09-27 15:15:00) [13]

> [7] Джо ©   (27.09.07 15:14)

> А разве не так?
> ScanDirectory('C:\', False, Memo1.Strings, '', '', 0);
> ;)

Т.е., Lines, конечно.


Джо   (2007-09-27 15:14:00) [14]

> [5] Kolan ©   (27.09.07 15:11)
> > Спасибо. Проверю.
>
> Пользоваться так:
>
> var
> Strings: TStrings;
> begin
> Strings : TStringList.Create;
> try  
>   ScanDirectory('C:\', False, Strings, '', '', 0);
>   Memo1.Lines.Text := Strings.Text;
> finally
>   Strings.Free;
> end;
> end;


А разве не так?
ScanDirectory('C:\', False, Memo1.Strings, '', '', 0);
;)


{RASkov}   (2007-09-27 15:13:00) [15]


> [5] Kolan ©   (27.09.07 15:11)

А почему не так:
begin
 ScanDirectory('C:\', False, Memo1.Lines, '', '', 0);
end;

? :)


Kolan   (2007-09-27 15:11:00) [16]

> Спасибо. Проверю.

Пользоваться так:

var
 Strings: TStrings;
begin
 Strings : TStringList.Create;
 try  
   ScanDirectory('C:\', False, Strings, '', '', 0);
   Memo1.Lines.Text := Strings.Text;
 finally
   Strings.Free;
 end;
end;


{RASkov}   (2007-09-27 15:06:00) [17]

> [0] Nikfel ©   (27.09.07 13:48)
> Как получить список папок и вывести в memo1, и получит список файлов и вывести в memo2
> Желательно бы найти самый быстрый вариант

А обязательно Memo нужны? Например ListBox'ы - не подойдут?


Nikfel   (2007-09-27 13:55:00) [18]

Спасибо. Проверю.


Kolan   (2007-09-27 13:51:00) [19]

Пользовайся:


Kolan   (2007-09-27 13:51:00) [20]

procedure TPluginLoader.ScanDirectory(Directory: string;
 ScanSubFolders: Boolean; Strings: TStrings; Extension: string;
 FileName: string; RecursionCount: Integer);
var
 CurrentFile: TSearchRec;
begin
 Directory := IncludeTrailingPathDelimiter(Directory);
 if Assigned(Strings) and DirectoryExists(Directory) then
 begin
   try
     if FindFirst(Directory + '*.*', faAnyFile, CurrentFile) = 0 then
     begin
       repeat
         if (CurrentFile.Name '.') and (CurrentFile.Name '…') then
         begin
           if ((CurrentFile.Attr and faDirectory) 0) and ScanSubFolders then
             ScanDirectory(Directory+CurrentFile.Name, ScanSubFolders, Strings,
               Extension, FileName, RecursionCount + 1);
            if (Extension = '') or (ExtractFileExt(CurrentFile.Name) = Extension) then
              if (FileName = '') or (FileName = CurrentFile.Name) then
               Strings.Add(Directory+CurrentFile.Name)
         end;
       until FindNext(CurrentFile) 0;
     end;
   finally
     FindClose(CurrentFile);
   end;
 end;
end;


Наверх

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