Почему то никогда не любил работать с файловой системой, поэтому код представленный ниже я предпочел бы иметь в готовом виде, а не писать заново при необходимости.
Поэтому оставлю его здесь.
procedure GetAllFiles( Path: string; Lb: TListBox );
var
sRec: TSearchRec;
isFound: boolean;
begin
isFound := FindFirst( Path + ‘\*.*’, faAnyFile, sRec ) = 0;
while isFound do
begin
if ( sRec.Name <> ‘.’ ) and ( sRec.Name <> ‘..’ ) then
begin
if ( sRec.Attr and faDirectory ) = faDirectory then
GetAllFiles( Path + ‘\’ + sRec.Name, Lb );
Lb.Items.Add( Path + ‘\’ + sRec.Name );
end;
Application.ProcessMessages;
isFound := FindNext( sRec ) = 0;
end;
FindClose( sRec );
end;
И вызов что-нибудь типа: GetAllFiles( ‘C:\’, listbox1 );
p.s. я его честно где-то стащил.
Автор: Elsper.ru
21.01.2010 в 13:00
isFound := FindFirst( Path + ‘\\\\*.*’, faAnyFile, sRec ) = 0; Я не прогер и поэтому все что увидел в этой строке это целых два смайлика, а автор поста их тут увидит, интересно? А то ведь мы видим только то что привыкли. Можно еще пару символов за смайл принять, но как то не особо.
21.01.2010 в 14:12
Ну приглядевшись, смайлики конечно видно.
Так же как узоры букв в книге если её не читать, а рассматривать.
11.04.2010 в 13:55
var sr: TSearchRec;
begin
Memo1.Clear;
if FindFirst(‘C:\*.*’, faAnyFile, sr) = 0 then
begin
repeat
Memo1.Lines.Add(sr.Name);
until FindNext(sr) 0;
FindClose(sr);
end;
end;
11.04.2010 в 14:50
Хорошо, но не то.
Код в посте заходит в папки. И выдает полное дерево. Твой, нет.
07.03.2011 в 00:55
Этот гнилой код заполонил весь Интернет.
Он заходит только в одну подпапку!
07.03.2011 в 07:42
Лолчто???
В середине есть строки
if ( sRec.Attr and faDirectory ) = faDirectory then
GetAllFiles( Path + ‘\’ + sRec.Name, Lb );
догадайтесь зачем они вставлены.
07.03.2011 в 07:58
Сейчас еще раз проверил. Собирает всю структуру.
Вы бы лучше разбирались почему у вас это не работает, а не код винили. Ибо код довольно простой и понятный.
05.07.2011 в 13:39
А если нужно добавить только файлы с расширением mp3
помоги плз ото я не понял этот код
05.07.2011 в 17:52
Бауыржан, попробуй вместо
isFound := FindFirst( Path + ‘\*.*’, faAnyFile, sRec ) = 0;
написать
isFound := FindFirst( Path + ‘\*.mp3’, faAnyFile, sRec ) = 0;
и между строками
GetAllFiles( Path + ‘\’ + sRec.Name, Lb );
Lb.Items.Add( Path + ‘\’ + sRec.Name );
вставить условие проверки имени файла sRec.Name справишься или условие тоже подсказать?
05.07.2011 в 22:40
Спс теперь у меня другая проблема есть папка «музыка» внутри музыки есть папка «Club» если выделить музыку то добавляются файлы которые находится в «Музыка» а те которые находиться в «Club» не добавляются уфф ели как объяснил
))
procedure GetAllFiles( Path: string; Lb: TListBox );
var
sRec: TSearchRec;
isFound: boolean;
begin
isFound := FindFirst( Path + ‘\*.mp3′, faAnyFile, sRec ) = 0;
while isFound do
begin
if ( sRec.Name ‘.’ ) and ( sRec.Name ‘..’ ) then
begin
if ( sRec.Attr and faDirectory ) = faDirectory then
GetAllFiles( Path + ‘\’ + sRec.Name, Lb );
Lb.Items.Add( Path + ‘\’ + sRec.Name );
end;
Application.ProcessMessages;
isFound := FindNext( sRec ) = 0;
end;
FindClose( sRec );
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
GetAllFiles( ‘E:\музыка’, listbox1 );
end;
end.
06.07.2011 в 00:14
верни код как было используй то, что в посте
с ‘\*.mp3’ косяк выходит
но вместо
GetAllFiles( Path + ‘\’ + sRec.Name, Lb );
Lb.Items.Add( Path + ‘\’ + sRec.Name );
поставь
GetAllFiles( Path + ‘\’ + sRec.Name, Lb );
if pos(‘.mp3′,copy(sRec.Name, length(sRec.Name)-3,4))=1 then
Lb.Items.Add( Path + ‘\’ + sRec.Name );
06.07.2011 в 01:24
Спс тебе Большое !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Все получилось
procedure GetAllFiles( Path: string; Lb: TListBox );
var
sRec: TSearchRec;
isFound: boolean;
begin
isFound := FindFirst( Path + ‘\*.*’, faAnyFile, sRec ) = 0;
while isFound do
begin
if ( sRec.Name ‘.’ ) and ( sRec.Name ‘..’ ) then
begin
if ( sRec.Attr and faDirectory ) = faDirectory then
GetAllFiles( Path + ‘\’ + sRec.Name, Lb );
if pos(‘.mp3′,copy(sRec.Name, length(sRec.Name)-3,4))=1 then
Lb.Items.Add( Path + ‘\’ + sRec.Name );
if pos(‘.AAC’,copy(sRec.Name, length(sRec.Name)-3,4))=1 then
Lb.Items.Add( Path + ‘\’ + sRec.Name );
end;
Application.ProcessMessages;
isFound := FindNext( sRec ) = 0;
end;
FindClose( sRec );
end;
procedure TForm1.Button1Click(Sender: TObject);
var dir: String;
pwRoot : PWideChar;
begin
if not SelectDirectory(‘Выберите папку с музыкальными файлами’, pwRoot, Dir)
then Dir :=»
else Dir := Dir+»;
GetAllFiles( dir, listbox1 );
end;
end.
06.07.2011 в 01:29
ну и отлично =)
28.08.2011 в 21:53
[...] хотя у меня есть процедура для того чтобы получить список всех файлов задача требует чтобы все файлы были в одной [...]