Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.01.23;
Скачать: CL | DM;

Вниз

Рекурсивный поиск на CD-ROM е   Найти похожие ветки 

 
[lamer]Barmaglot   (2002-12-05 11:02) [0]

Возникла проблема. Я сделал програмку для рекурсивного поиска файлов. Все работает с жесткими дисками, но с CD-Rom"ом проблема. Где-то видел разговор о чем-то подобном, но найти не смог. Может кто-нибудь знает как решить эту проблему?

На всякий случай листинг процедуры:

procedure RecurseSearch(sPath: string; sPref: string);
begin
if Copy(sPath,Length(sPath),1)="\" then sPath:=sPath else sPath:=sPath+"\";
if FindFirst(sPath+"*.*",FaAnyFile,sr)=0 then
begin
if DirectoryExists(sPath+sr.Name) then //FileCtrl
begin
if (sr.name<>".") and (sr.name<>"..") then
begin
SetLength(Dir,1);
Dir[0]:=sPath+sr.Name;
form1.listbox1.Items.Add(sPath+sr.Name);
end;
end
else
begin
if getextension(sPref)=getextension(sr.name) then
begin
SetLength(DirFile,1);
DirFile[0]:=sPath+sr.Name;
form1.listbox2.Items.Add(sPath+sr.Name+" "+inttostr(sr.Size));
inc(filecounter);
end;
end;
end;

while FindNext(sr)=0 do
begin
if DirectoryExists(sPath+sr.Name) then
begin
if (sr.name<>".") and (sr.name<>"..") then
begin
SetLength(Dir, Length(Dir)+1);
Dir[High(Dir)]:=sPath+SR.name;
form1.listbox1.Items.Add(sPath+sr.Name);
end;
end
else
begin
if getextension(sPref)=getextension(sr.name) then
begin
SetLength(DirFile, Length(DirFile)+1);
DirFile[High(DirFile)]:=sPath+SR.name;
form1.listbox2.Items.Add(sPath+sr.Name+" "+inttostr(sr.Size));
inc(filecounter);
end;
end;
form1.Edit2.Text:=inttostr(filecounter);
application.ProcessMessages;
end;

end;


 
Игорь Шевченко   (2002-12-05 11:22) [1]


> then sPath:=sPath


Круто! Уважометр зашкаливает :-)


 
[lamer]Barmaglot   (2002-12-05 12:02) [2]

Ну надо же было чегото поставить :-). Как насчет совета...


 
Игорь Шевченко   (2002-12-05 12:04) [3]

А в чем проблема-то ?
(кроме как в кривом коде)


 
[lamer]Barmaglot   (2002-12-05 14:03) [4]

Почему этот код не работает с CD-Rom"ом? Точнее директории записывает, а вот файлы не хочет.

P.S. А кроме path:=path, что ещё кривого?


 
Игорь Шевченко   (2002-12-05 14:43) [5]

В FAQ"е есть код на тему рекурсивного поиска файлов и каталогов. Может, поглядеть ?


 
ProtoSoft   (2002-12-08 02:10) [6]

Привет! Вот тебе процедуры, которые сканируют все, что угодно.
Может, где-нить будут глюки с begin end то убери все сам. Просто проверять некогда было, вырезал из своей проги и втыкнул сюда, наспех поубирав, вроде тебе ненужное. Напиши ответ, когда попробуешь!

...
procedure SearchFileDatas(ADirr:String);
function ScanFilesDatas( ADir,ViewScan: String):integer;
...


...
SearchFileDatas(ScanPath+"\*.*"); //Ищем в файлы в корневом
...
ScanFilesDatas(ScanPath,"Static"); //Сама процедура
..




procedure SearchFileDatas(ADirr:String);
var
Srr:TsearchRec;
begin
if FileNameCheck(ADirr)=true then begin

FindFirst(ADirr,FaDirectory+faReadOnly+faAnyFile+faHidden+faSysFile,Srr);

repeat
if Length(Srr.Name)>=1 then begin //
if (Srr.Name[1]<>".")and(Srr.Name<>"") then begin
{Считаем файлы}

if fileexists(ExtractFilePath(ADirr)+Srr.Name)=true then begin

//AddNewFile(ExtractFilePath(ADirr)+Srr.Name); //Можешт сделать что-то с файлом, тебе не нужна
{}
FilesList.add(ExtractFilePath(ADirr)+Srr.Name);
end;
end; //if Length(Srr.Name)>=1 then begin
Application.ProcessMessages;
until FindNext(Srr)<>0;
// FindClose(Srr);
end;
...

{Процедура сканирования каталогов}
function ScanFilesDatas( ADir,ViewScan: String):integer;
var
SR : TSearchRec;
begin

SearchFileDatas(ADir+"\*.*"); //Ищем в нем файлы
if findfirst(ADir+"\*.*", faDirectory+faReadOnly+faAnyFile+faHidden+faSysFile+faVolumeID+faArchive, SR ) = 0 then

repeat
if Length(SR.Name)>=1 then begin
if ((SR.Attr and faDirectory) = faDirectory) and
(SR.Name[1]<>".")
then begin
{// добавляем каталог в список}
{// входим в свеженайденный каталог и ищем его подкаталоги}
DtempW.Add(ADir+"\"+SR.Name);
SearchFileDatas(ADir+"\"+SR.Name); //Ищем в нем файлы
ScanFilesDatas(ADir+"\"+SR.Name,ViewScan); //
end;
{//выходим из процедуры когда попадаем в каталог не содержащий подкаталогов}
end; //SR.Name>=1
until findNext( SR ) <> 0;
// FindClose( SR );
Result:=CountDirs;
end;



Страницы: 1 вся ветка

Текущий архив: 2003.01.23;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.007 c
3-72089
VS2002
2002-12-29 06:32
2003.01.23
Поле со списком в DBGrid


1-72336
Schummi
2003-01-02 14:36
2003.01.23
TChart в два ряда


1-72386
dim-
2003-01-12 03:11
2003.01.23
Позиция курсора в RxRichEdit


7-72552
baryjul
2002-11-11 23:56
2003.01.23
Вывод ввод в из аппаратный порт байта, слова в Delphi.


1-72169
Nickm
2003-01-11 12:48
2003.01.23
xmldocument+stylesheet





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский