Форум: "Основная";
Текущий архив: 2005.06.29;
Скачать: [xml.tar.bz2];
ВнизПомогите найти ошибку в функции подсчета кол-ва файлов... Найти похожие ветки
← →
Cosinus © (2005-06-06 12:34) [0]Есть функция рекурсивного сканирования дерева каталогов с добавлением их в нек. 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;
Почему то результаты первой функции не совпадают с результатами второй - во второй меньше. Не пойму почему...
Отличия то минимальны. Что я упустил?
← →
Digitman © (2005-06-06 12:42) [1]
> GetFileCount(Count
что передается параметром Count ?
← →
Cosinus © (2005-06-06 12:49) [2]
> Digitman © (06.06.05 12:42) [1]
В самом начале0
← →
Digitman © (2005-06-06 12:54) [3]и каков смысл в этом ?
почему бы не передать -123456 ?
или 987654321 ?
← →
Alexander Panov © (2005-06-06 12:56) [4]
function GetFileCount(var Count:integer;Dir: string): integer;
← →
Digitman © (2005-06-06 12:58) [5]
> Alexander Panov © (06.06.05 12:56) [4]
а нашута ему ссылка ?
результат он получает в виде int-значения, возвращаемого ф-цией ..
а что уж он там с Count делает дальше - это его проблема ..
← →
novice_man © (2005-06-06 12:59) [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;
Исправь как показано. В первом варианте тоже неправильно считает количество файлов. :)
← →
novice_man © (2005-06-06 13:00) [7]
if Dir[length(Dir)] <> "\" then Dir := Dir + "\";
равнозначноIncludeTrailingPathDelimiter(const S: string): string;
← →
Cosinus © (2005-06-06 13:01) [8]
> Digitman © (06.06.05 12:54) [3]
Сначала не понял, но послеAlexander Panov © (06.06.05 12:56) [4]
понял :)
Спасибо, стормозил.
← →
jack128 © (2005-06-06 13:01) [9]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;
← →
Cosinus © (2005-06-06 13:03) [10]
> novice_man © (06.06.05 12:59) [6]
Да, спасибо, я уже допер.
И то, что d первом примере на 1 меньше считает, тоже понятно :) Я там еденичку прибавлял :)
← →
novice_man © (2005-06-06 13:04) [11]jack128 © (06.06.05 13:01) [9]
Вы не правы. :) Проверял несколько раз.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2005.06.29;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.043 c