![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#16
|
||||
|
||||
|
|
|
#17
|
||||
|
||||
|
Цитата:
![]() |
|
#18
|
||||
|
||||
|
Или вот еще http://www.delphisources.ru/forum/sh...376#post116376, создавал подобную тему на форуме, добавляет в листбокс все файлы с папок и подпапок.
|
|
#19
|
||||
|
||||
|
Или ешё.
Код:
procedure FindFiles(const Path : String);
var
SR : TSearchRec;
Ext : String;
begin
if FindFirst(ExpandFileName(Path + '\*.*'), faAnyFile, SR) = 0 then
try
repeat
if ((SR.Attr and faDirectory) <> 0) and (SR.Name[1] <> '.') then
FindFiles(ExpandFileName(Path + '\' + SR.Name))
else if (SR.Name[1] <> '.') then
ListBox1.Items.Add(SR.Name);
until FindNext(SR) <> 0;
finally
FindClose(SR);
end;
end; |
|
#20
|
||||
|
||||
|
Цитата:
|
|
#21
|
||||
|
||||
|
Код:
procedure FindFiles(const Path : String);
var
SR : TSearchRec;
Ext : String;
begin
if FindFirst(ExpandFileName(Path + '\*.*'), faAnyFile, SR) = 0 then
try
repeat
if ((SR.Attr and faDirectory) <> 0) and (SR.Name[1] <> '.') then
FindFiles(ExpandFileName(Path + '\' + SR.Name))
else if (SR.Name[1] <> '.') then
ListBox1.Items.Add(SR.Name);
until FindNext(SR) <> 0;
finally
FindClose(SR);
end;
end;возник вопрос, почему в этом коде при указании маски допустим *.txt не ищет файлы в подпапках? |
|
#22
|
||||
|
||||
|
Цитата:
Другими словами этот код с маской "*.txt" не увидит ни файлов ни папок у которых расширение не ".txt", а раз он не увидит папку, то и не войдёт в неё. |
|
#23
|
||||
|
||||
|
Значит все-таки есть костыль для *.*. Прикольно.
to ТС: Перебирать надо папки (с маской * и проверять атрибут faDirectory), а потом в папке отдельно запускать поиск *.txt. |
|
#24
|
||||
|
||||
|
Цитата:
Даже если в имени файла нет точки и вроде не должно быть расширения, но всё равно считается что расширение есть, просто пустое. Например папка с именем "TEMP" представляется как "TEMP." - т.е. 4 символа имя, 0 символов расширение и точка между ними. Поэтому под виндой маска "*.*" работает всегда.p.s. Ещё пример тяжкого наследия DOS-а - нельзя создать папку или файл например с таким именем: "con.txt" ![]() |
| Этот пользователь сказал Спасибо poli-smen за это полезное сообщение: | ||
Alegun (27.11.2012)
| ||
|
#25
|
||||
|
||||
|
Оффтоп: Офигеть, и вправду нельзя такой файл создать, во приколка:-О!
Небольшой пример по поиску: http://www.delphisources.ru/forum/sh...ad.php?t=10003 |
|
#26
|
||||
|
||||
|
можно:
-создать папку temp. md \\?\d:\Downloads\temp. -создать файл con.txt type nul > \\?\d:\Downloads\con.txt |
|
#27
|
||||
|
||||
|
Помогите переписать этот код для поиска с маской в подпапках!
Код:
procedure FindFiles(const Path : String);
var
SR : TSearchRec;
Ext : String;
begin
if FindFirst(ExpandFileName(Path + '\*.*'), faAnyFile, SR) = 0 then
try
repeat
if ((SR.Attr and faDirectory) <> 0) and (SR.Name[1] <> '.') then
FindFiles(ExpandFileName(Path + '\' + SR.Name))
else if (SR.Name[1] <> '.') then
ListBox1.Items.Add(SR.Name);
until FindNext(SR) <> 0;
finally
FindClose(SR);
end;
end; |
|
#28
|
||||
|
||||
|
Код:
procedure GetAllFiles(Path: string; ListBox: TListBox );
var
sRec: TSearchRec;
isFound: Boolean;
begin
Path := IncludeTrailingPathDelimiter(Path);
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, ListBox);
if Pos('.mp3', Copy(sRec.Name, Length(sRec.Name)-3, 4)) = 1 then
ListBox.Items.Add(Path + sRec.Name);
if Pos('.AAC', Copy(sRec.Name, Length(sRec.Name)-3, 4)) = 1 then
ListBox.Items.Add(Path + sRec.Name);
end;
Application.ProcessMessages;
isFound := FindNext(sRec) = 0;
end;
FindClose(sRec);
end; |
|
#29
|
||||
|
||||
|
Цитата:
Код:
procedure FindFiles(const Dir, Ext: string; ResultList: TStrings);
procedure SubFind(const Path: string);
var
SR: TSearchRec;
begin
if FindFirst(Path + '*.*', faAnyFile, SR) = NO_ERROR then
try
repeat
if (SR.Attr and faDirectory) = 0 then // File
begin
if AnsiSameText(Ext, ExtractFileExt(SR.Name)) then ResultList.Add(Path + SR.Name);
end else // Dir
begin
if (SR.Name <> '.') and (SR.Name <> '..') then SubFind(Path + SR.Name + '\');
end;
until FindNext(SR) <> NO_ERROR;
finally
FindClose(SR);
end;
end;
begin
SubFind(IncludeTrailingPathDelimiter(Dir));
end;Пример использования: Код:
procedure TForm1.Button1Click(Sender: TObject);
begin
ListBox1.Items.BeginUpdate;
try
FindFiles('C:\WINDOWS', '.exe', ListBox1.Items);
finally
ListBox1.Items.EndUpdate;
end;
end; |
| Этот пользователь сказал Спасибо poli-smen за это полезное сообщение: | ||
MoS (09.12.2012)
| ||