Главная страница
    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
1-72228
Джин
2003-01-14 15:31
2003.01.23
Создание компонент


1-72311
Chubais
2003-01-15 15:29
2003.01.23
как найти вызов dll


3-72162
Aleksandr
2003-01-04 13:46
2003.01.23
Не знаю, отчего ошибка проявляется... Но явно не от написанного.


1-72329
Нежить
2003-01-11 22:43
2003.01.23
CM_MOUSEENTER etc. Можно ли словить, не содавая потомка?


14-72475
phantom2040
2003-01-05 10:43
2003.01.23
Вопрос по интернет сайту





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