Форум: "WinAPI";
Текущий архив: 2003.01.23;
Скачать: [xml.tar.bz2];
ВнизРекурсивный поиск на 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 вся ветка
Форум: "WinAPI";
Текущий архив: 2003.01.23;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.009 c