Форум: "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