Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2003.09.18;
Скачать: [xml.tar.bz2];

Вниз

Поиск файлов   Найти похожие ветки 

 
Igit   (2003-07-12 08:06) [0]

Здраствуйте уважаемые мастера. У меня тут возникла проблема... посмотрел я описание FindFirstFile и начал писать функцию для поиска всех файлов, включая подкаталоги:

procedure FindFiles(Path:string);
const
up_dir: string = ".";
//пришлось заводить отделбную констанду, потому что компилятор ругался о несовместимости типов
var
SearchRec: TWIN32FindData;
FindResult: Integer;
begin
Path:=IncludeTrailingPathDelimiter(Path);
// это путь, откуда начинать искать, добавляю туда, если там нет "\"
FindResult:=FindFirstFile(PChar(Path+"*.*"), SearchRec);
// завожу поиск
if FindResult<>0 then
if SearchRec.dwFileAttributes=FILE_ATTRIBUTE_DIRECTORY then
// если наткнулся на папку, тогда
begin
if not (SearchRec.cFileName = "..")or(SearchRec.cFileName = up_dir) then
// если имя папки не "." и ".." тогда рекурсивно...
FindFiles(Path+SearchRec.cFileName);
end;
end;

Вот на 4 снизу и глючит. Если имя получается "." (в отладчике смотрел) то проверка не срабатывает...
Ну вот и вопрос:XXnj у меня не так? Как это, когда я проверяю "."="." она мне говорит, что ,мол, неравно, нифига...


 
Набережных С.   (2003-07-12 13:09) [1]

Потому, что по-русски твое условие выглядит так:

Если не выполняется (SearchRec.cFileName = "..") или выполняется (SearchRec.cFileName = up_dir), то выполнить рекурсивный вызов FindFiles(Path+SearchRec.cFileName)


 
Igit   (2003-07-12 19:55) [2]

Ой... незаметил... Спасибо большое.


 
Igit   (2003-07-17 06:47) [3]

Вот я закончил это писать, но не все файлы проходит она, например запускаю диск С:\ а функция не все добавила...

procedure FindFiles(Path:string);
const
up_dir: string = ".";
var
SearchRec: TWIN32FindData;
FindResult: Integer;
tmp:bool ;
begin
tmp:=true;
{добовлю "\" если нет, чтоб получилось X:\...\XYZ\}
Path:=IncludeTrailingPathDelimiter(Path);
{завожу поиск}
FindResult:=FindFirstFile(PChar(Path+"*.*"), SearchRec);
//===проверка, есть ли вобще что нить здесь========//=|
//===срабатывает в корне пустого диска=============//=|
{}if FindResult=0 then //
{} begin //
{} FindClose(FindResult); //
{} exit; //
{} end; //
//=================================================//=|
if SearchRec.dwFileAttributes=FILE_ATTRIBUTE_DIRECTORY then
// если нашлось папко, тогда
//========================================================================//=|
{} begin //
{} //если папка ".", тогда ищем следущюй файл //
{} if SearchRec.cFileName = up_dir then //
{} if not FindNextFile(FindResult, SearchRec) then //
{} begin //
{} {если не находим, то выходим} FindClose(FindResult); //
{} exit; //
{} end; //
{} //если находим, то если это ".." тогда //
{} if SearchRec.cFileName = ".." then //
{} if not FindNextFile(FindResult, SearchRec) then //
{} begin //
{} {ищем дальше, если не находим, то выходим} FindClose(FindResult); //
{} exit; //
{} end; //
{} //если находим, то проверяем - папка ли это //
{} if SearchRec.dwFileAttributes=FILE_ATTRIBUTE_DIRECTORY then //
{} begin //
{} FindFiles(Path+SearchRec.cFileName);//если да, то ищем в ней файлы //
{} tmp:=false; //метим, что в первом попавшемся каталоге уже искали //
{} end; //
{} end //
//========================================================================//=|
else
//=========если это не папка, тогда добавляем файл в список======================//=|
{} begin //
{} Form1.ListView1.LVItemAdd(Int2Str(Form1.ListView1.Count+1)); //
{} Form1.ListView1.LVItems[Form1.ListView1.Count-1,1]:="-1"; //
{} Form1.ListView1.LVItems[Form1.ListView1.Count-1,2]:=Path+SearchRec.cFileName;//
{} Form1.ListView1.LVItems[Form1.ListView1.Count-1,3]:="-1"; //
{} end; //
//===============================================================================//=|
repeat
if SearchRec.dwFileAttributes=FILE_ATTRIBUTE_DIRECTORY then
if tmp then // если в первом каталоге (FindFirstFile) не искали
FindFiles(Path+SearchRec.cFileName)
else tmp:=true
else
begin
Form1.ListView1.LVItemAdd(Int2Str(Form1.ListView1.Count+1));
Form1.ListView1.LVItems[Form1.ListView1.Count-1,1]:=Path+SearchRec.cFileName;
( FindResult, SearchRec)
Вот я закончил это писать, но не все файлы проходит она, например запускаю диск С:\ а функция не все добавила...

procedure FindFiles(Path:string);
const
up_dir: string = ".";
var
SearchRec: TWIN32FindData;
FindResult: Integer;
tmp:bool ;
begin
tmp:=true;
{добовлю "\" если нет, чтоб получилось X:\...\XYZ\}
Path:=IncludeTrailingPathDelimiter(Path);
{завожу поиск}
FindResult:=FindFirstFile(PChar(Path+"*.*"), SearchRec);
//===проверка, есть ли вобще что нить здесь========//=|
//===срабатывает в корне пустого диска=============//=|
{}if FindResult=0 then //
{} begin //
{} FindClose(FindResult); //
{} exit; //
{} end; //
//=================================================//=|
if SearchRec.dwFileAttributes=FILE_ATTRIBUTE_DIRECTORY then
// если нашлось папко, тогда
//========================================================================//=|
{} begin //
{} //если папка ".", тогда ищем следущюй файл //
{} if SearchRec.cFileName = up_dir then //
{} if not FindNextFile(FindResult, SearchRec) then //
{} begin //
{} {если не находим, то выходим} FindClose(FindResult); //
{} exit; //
{} end; //
{} //если находим, то если это ".." тогда //
{} if SearchRec.cFileName = ".." then //
{} if not FindNextFile(FindResult, SearchRec) then //
{} begin //
{} {ищем дальше, если не находим, то выходим} FindClose(FindResult); //
{} exit; //
{} end; //
{} //если находим, то проверяем - папка ли это //
{} if SearchRec.dwFileAttributes=FILE_ATTRIBUTE_DIRECTORY then //
{} begin //
{} FindFiles(Path+SearchRec.cFileName);//если да, то ищем в ней файлы //
{} tmp:=false; //метим, что в первом попавшемся каталоге уже искали //
{} end; //
{} end //
//========================================================================//=|
else
//=========если это не папка, тогда добавляем файл в список======================//=|
{} begin //
{} Form1.ListView1.LVItemAdd(Int2Str(Form1.ListView1.Count+1)); //
{} Form1.ListView1.LVItems[Form1.ListView1.Count-1,1]:="-1"; //
{} Form1.ListView1.LVItems[Form1.ListView1.Count-1,2]:=Path+SearchRec.cFileName;//
{} Form1.ListView1.LVItems[Form1.ListView1.Count-1,3]:="-1"; //
{} end; //
//===============================================================================//=|
repeat
if SearchRec.dwFileAttributes=FILE_ATTRIBUTE_DIRECTORY then
if tmp then // если в первом каталоге (FindFirstFile) не искали
FindFiles(Path+SearchRec.cFileName)
else tmp:=true
else
begin
Form1.ListView1.LVItemAdd(Int2Str(Form1.ListView1.Count+1));
Form1.ListView1.LVItems[Form1.ListView1.Count-1,1]:=Path+SearchRec.cFileName;
end;
until not FindNextFile(FindResult, SearchRec);
FindClose(FindResult);
end;




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

Форум: "WinAPI";
Текущий архив: 2003.09.18;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.009 c
4-58970
mm0
2003-07-15 17:05
2003.09.18
Как убить процесс в зная только его название?


1-58756
Паштет
2003-09-06 03:12
2003.09.18
Чтение кодировок из файлов


14-58915
race1
2003-08-28 11:59
2003.09.18
реклама


3-58539
Виктор
2003-08-27 14:36
2003.09.18
QReport


7-58953
Сергей Князев
2003-07-03 10:41
2003.09.18
Два модема одновременно





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