Текущий архив: 2003.04.14;
Скачать: CL | DM;
ВнизПроблема в порядке найденных файлов Найти похожие ветки
← →
electric (2003-04-02 16:29) [0]У меня возникла проблема в порядке найденных файлов, они получаются разбросанными, а мне надо чтобы шли по алфавитному порядку , как файлы, так и каталоги.
← →
Palladin (2003-04-02 16:34) [1]
> У меня возникла проблема в порядке найденных
У тебя возникла потребность в сортировке найденых файлов, проблемы здесь нет
Заноси найденые файлы и каталоги в TStringList и после занесения выполни YStringList.Sort;
← →
electric (2003-04-02 16:39) [2]> Palladin © (02.04.03 16:34)
Я сначала тоже так думал, но сортировка происходит общая , а не в отдельности каждая папочка.
← →
panov (2003-04-02 16:43) [3]Ну так по-отдельности сортируй каждую... В чем проблема-то?
← →
electric (2003-04-02 16:48) [4]panov © (02.04.03 16:43)
Может подскажешь как это делать?
Я это и хочу услышать от Вас.
← →
panov (2003-04-02 16:52) [5]Так ты бы хоть метод описал, которым получаешь список файлов,
мы же не ясновидящие...
← →
Palladin (2003-04-02 16:54) [6]
> Я это и хочу услышать от Вас.
что то не видел я этих слов в первом вопросе...
> а не в отдельности каждая папочка.
но ведь список файлов то ты получаешь для каждой отдельной папочки... кто тебе мешает создать TStringList для каждой отдельной папочки?
← →
electric (2003-04-02 16:57) [7]>panov © (02.04.03 16:52)
Взял у Анатолия Подгорецкого
Как получить список файлов со всеми подкаталогами
procedure ScanDir(StartDir: string; Mask:string; List:TStrings);
var
SearchRec : TSearchRec;
begin
if Mask = "" then Mask := "*.*";
if StartDir[Length(StartDir)] <> "\" then StartDir := StartDir + "\";
if FindFirst(StartDir+Mask, faAnyFile, SearchRec) = 0 then
begin
repeat
Application.ProcessMessages;
if (SearchRec.Attr and faDirectory) <> faDirectory then
List.Add(StartDir + SearchRec.Name)
else if (SearchRec.Name <> "..") and (SearchRec.Name <> ".") then
begin
List.Add(StartDir + SearchRec.Name + "\");
ScanDir(StartDir + SearchRec.Name + "\",Mask,List);
end;
until FindNext(SearchRec) <> 0;
FindClose(SearchRec);
end;
end;
Пример вызова, параметры
1. имя папки
2. маска, по умолчанию *.*
3. хранилище для резульатат,
любой наследник от TString, например TStringList
procedure TForm1.Button1Click(Sender: TObject);
begin
ListBox1.Items.Clear;
ScanDir("c:","",ListBox1.Items);
Label1.Caption := IntToStr(ListBox1.Items.Count);
end;
← →
Anatoly Podgoretsky (2003-04-02 16:57) [8]Palladin © (02.04.03 16:54)
Не совсем так, это только если процедура получения имен построена должным образом, а если нет, то файлы в папке и вложенные папки идут в разброс.
Процедура должна быть двух уровневая
1. получение только файлов
2. получения папок и рекурсия
← →
electric (2003-04-02 17:01) [9]Anatoly Podgoretsky © (02.04.03 16:57)
Анатолий, скажите же пажалуйста как это сделать.
← →
Palladin (2003-04-02 17:04) [10]
> Anatoly Podgoretsky © (02.04.03 16:57)
ну я на общий принцип намекнул.. думать то пусть он думает, что заносить а что нет...
да и представление вообщето здесь необзодимо древовидное...
← →
electric (2003-04-02 17:10) [11]Palladin © (02.04.03 17:04)
Зачем мне намекать, эти намёки я сам давно понял, подскажите лучше как это осуществить. Неужели вы думаете , что я не пытался, что-то похимичить. Зря вы так думаете.
← →
panov (2003-04-02 17:13) [12]Лучше бы ты сам подумао о внесении изменений в код процедуры получения списка файлов.
Изменения небольшие:
procedure ScanDir(StartDir: string; Mask:string; List:TStrings);
var
SearchRec : TSearchRec;
tmpList: TStringList;
begin
tmpList := TStringList.Create;
try
if Mask = "" then Mask := "*.*";
if StartDir[Length(StartDir)] <> "\" then StartDir := StartDir + "\";
if FindFirst(StartDir+Mask, faAnyFile, SearchRec) = 0 then
begin
repeat
Application.ProcessMessages;
if (SearchRec.Attr and faDirectory) <> faDirectory then
tmpList.Add(StartDir + SearchRec.Name)
else if (SearchRec.Name <> "..") and (SearchRec.Name <> ".") then
begin
tmpList.Sort;
List.AddStrings(tmpList);
tmpList.Clear;
List.Add(StartDir + SearchRec.Name + "\");
ScanDir(StartDir + SearchRec.Name + "\",Mask,List);
end;
until FindNext(SearchRec) <> 0;
FindClose(SearchRec);
end;
finally
tmpList.Free;
end;
end;
← →
electric (2003-04-02 17:46) [13]>panov © (02.04.03 17:13)
Такой намек больше нравится, но твой код не находит некоторые файлы :-(
← →
Anatoly Podgoretsky (2003-04-02 18:19) [14]У меня на сайте есть компонент DirScan, можешь его взять за основу, писался давно, может не совсем оптимально.
← →
Alexander Vasjuk (2003-04-02 18:34) [15]В порядке бреда:
Запусти внешний процесс "dir c:\ /s > dir.txt /oe", а потом считай из dir.txtготовенькое.
Страницы: 1 вся ветка
Текущий архив: 2003.04.14;
Скачать: CL | DM;
Память: 0.48 MB
Время: 0.008 c