![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Помогите найти ошибку в функции подсчета кол-ва файлов... [D6, Win2k]
Cosinus © (2005-06-06 12:34:00)Есть функция рекурсивного сканирования дерева каталогов с добавлением их в нек. ListBox (для примера)...
function ScanDir(Dir: string):integer;
var
SearchRec: TSearchRec;
begin
if Dir <> '' then
if Dir[length(Dir)] <> '\' then
Dir := Dir + '\';
if FindFirst(Dir + '*.*', faAnyFile, SearchRec) = 0 then
repeat
if (SearchRec.name = '.') or (SearchRec.name = '..') then
continue;
if (SearchRec.Attr and faDirectory) <> 0 then
ScanDir(Dir + SearchRec.name)
else
Result:=Form1.UrlList.Items.Add(Dir+SearchRec.name);
until FindNext(SearchRec) <> 0;
FindClose(SearchRec);
end;
Простой переделкой хочу сделать из нее функцию банального подсчета файлов...
function GetFileCount(Count:integer;Dir: string): integer;
var
SearchRec: TSearchRec;
begin
if Dir <> '' then
if Dir[length(Dir)] <> '\' then
Dir := Dir + '\';
if FindFirst(Dir + '*.*', faAnyFile, SearchRec) = 0 then
repeat
if (SearchRec.name = '.') or (SearchRec.name = '..') then
continue;
if (SearchRec.Attr and faDirectory) <> 0 then
GetFileCount(Count,Dir + SearchRec.name)
else
inc(Count);
until FindNext(SearchRec) <> 0;
FindClose(SearchRec);
Result:=Count;
end;
Почему то результаты первой функции не совпадают с результатами второй - во второй меньше. Не пойму почему...
Отличия то минимальны. Что я упустил?
novice_man (2005-06-06 13:04:00) [1]jack128 © (06.06.05 13:01) [9]
Вы не правы. :) Проверял несколько раз.
Cosinus (2005-06-06 13:03:00) [2]
> novice_man © (06.06.05 12:59) [6]
Да, спасибо, я уже допер.
И то, что d первом примере на 1 меньше считает, тоже понятно :) Я там еденичку прибавлял :)
Cosinus (2005-06-06 13:01:00) [3]
> Digitman © (06.06.05 12:54) [3]
Сначала не понял, но послеAlexander Panov © (06.06.05 12:56) [4]понял :)
Спасибо, стормозил.
jack128 (2005-06-06 13:01:00) [4]novice_man © (06.06.05 12:59) [6]
В первом варианте тоже неправильно считает количество файлов. :)
в твоем тоже не правельно считает ;)
Count вообще здесь не нужен..
function GetFileCount(Dir: string): integer;
var
SearchRec: TSearchRec;
begin
Result := 0;
if Dir <> '' then
if Dir[length(Dir)] <> '\' then
Dir := Dir + '\';
if FindFirst(Dir + '*.*', faAnyFile, SearchRec) = 0 then
try
repeat
if (SearchRec.name = '.') or (SearchRec.name = '..') then
continue;
if (SearchRec.Attr and faDirectory) <> 0 then
inc(Result, GetFileCount(Dir + SearchRec.name))
else
inc(Result);
until FindNext(SearchRec) <> 0;
finally
FindClose(SearchRec);
end;
end;
novice_man (2005-06-06 13:00:00) [5]
if Dir[length(Dir)] <> '\' then Dir := Dir + '\';
равнозначноIncludeTrailingPathDelimiter(const S: string): string;
novice_man (2005-06-06 12:59:00) [6]
function GetFileCount(Count:integer;Dir: string): integer;
var
SearchRec: TSearchRec;
begin
if Dir <> '' then
if Dir[length(Dir)] <> '\' then
Dir := Dir + '\';
if FindFirst(Dir + '*.*', faAnyFile, SearchRec) = 0 then
repeat
if (SearchRec.name = '.') or (SearchRec.name = '..') then
continue;
if (SearchRec.Attr and faDirectory) <> 0 then
Count :=GetFileCount(Count,Dir + SearchRec.name)
else
inc(Count);
until FindNext(SearchRec) <> 0;
FindClose(SearchRec);
Result:=Count;
end;
Исправь как показано. В первом варианте тоже неправильно считает количество файлов. :)
Digitman (2005-06-06 12:58:00) [7]
> Alexander Panov © (06.06.05 12:56) [4]
а нашута ему ссылка ?
результат он получает в виде int-значения, возвращаемого ф-цией ..
а что уж он там с Count делает дальше - это его проблема ..
Alexander Panov (2005-06-06 12:56:00) [8]
function GetFileCount( varCount:integer;Dir: string): integer;
Digitman (2005-06-06 12:54:00) [9]и каков смысл в этом ?
почему бы не передать -123456 ?
или 987654321 ?
Cosinus (2005-06-06 12:49:00) [10]
> Digitman © (06.06.05 12:42) [1]
В самом начале0
Digitman (2005-06-06 12:42:00) [11]
> GetFileCount(Count
что передается параметром Count ?