Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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.008 c
3-72104
Yanyk
2002-12-28 11:44
2003.01.23
DBgridEh


1-72371
id_privin
2003-01-10 13:15
2003.01.23
Несколько вопросов про компоненты


3-72118
Юлия
2002-12-29 15:24
2003.01.23
Метод Locate не хочет игнорировать регистр


14-72496
sancho
2003-01-05 19:23
2003.01.23
RTL порт


1-72203
Ivan12
2003-01-14 11:36
2003.01.23
Ресурсы про Excel





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский