Главная страница
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.49 MB
Время: 0.012 c
1-72387
Юра
2003-01-13 15:17
2003.01.23
Картинки в классе


6-72443
Beglec
2002-11-26 14:52
2003.01.23
Подсчет исходящих байтов


14-72513
Foil
2003-01-06 10:19
2003.01.23
Восстановление файла gdb


14-72470
RV
2003-01-05 09:52
2003.01.23
Дайте ссылку на программу или саму программу API_mon


7-72551
vidiv
2002-11-12 07:50
2003.01.23
KeyLock