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

Вниз

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

 
=Guest=   (2007-04-07 18:16) [0]

В папке www содержится 18 файлов и одна вложенная папка zzz в которой содержится 4 файла.
Мне необходимо посчитать количество файлов в папке и вов всех вложенных в нее папках.
Написал следующий код:

function GetFileCount(sPath:string):int64;
var
iFileCount:int64;
Count:integer;
SR:TSearchRec;
begin
iFileCount:=0;
Count:=SysUtils.FindFirst(sPath+"*.*",faAnyFile,SR);
 try
  while Count=0 do
   begin
    if (SR.Name<>".")and (SR.Name<>"..") then
     begin
      if (Sr.Attr and faDirectory)=faDirectory
       then GetFileCount(sPath+SR.Name)
        else
         inc(iFileCount);
     end;
    Count:=FindNext(SR);
   end;
 finally
  SysUtils.FindClose(SR);
  Result:=iFileCount;
 end;
end;


но получаю количество файлов 18 подскажите в чем ошибка.


 
Johnmen ©   (2007-04-07 18:29) [1]

В неуказании \ при получениии имен файлов во вложенной папке.


 
homm ©   (2007-04-07 18:36) [2]

> В папке www содержится 18 файлов и одна вложенная папка
> zzz в которой содержится 4 файла.
> Мне необходимо посчитать количество файлов в папке и вов
> всех вложенных в нее папках.

22?


 
homm ©   (2007-04-07 18:38) [3]

а если серьезно, нужно исправить

     if (Sr.Attr and faDirectory)=faDirectory
      then GetFileCount(sPath+SR.Name)
       else
        inc(iFileCount);


на

     if (Sr.Attr and faDirectory)=faDirectory
      then iFileCount := iFileCount + GetFileCount(sPath+SR.Name)
       else
        inc(iFileCount);


 
Anatoly Podgoretsky ©   (2007-04-07 18:43) [4]

> =Guest=  (07.04.2007 18:16:00)  [0]

И где у тебя сложение?


 
=Guest=   (2007-04-07 19:42) [5]

homm
if (Sr.Attr and faDirectory)=faDirectory
     then iFileCount := iFileCount + GetFileCount(sPath+SR.Name)
      else
       inc(iFileCount);

По прежнему 18 файлов


> И где у тебя сложение?


Anatoly Podgoretsky F а можно по подробнее как это реализовать?


 
trubin ©   (2007-04-07 19:57) [6]


> FindFirst(sPath+"*.*",faAnyFile,SR);


в имени папки у тебя нет точки

FindFirst(sPath+"*",faAnyFile,SR);


 
=Guest=   (2007-04-07 20:00) [7]


> в имени папки у тебя нет точки


исправлено но сути дела это не меняет


 
homm ©   (2007-04-07 20:05) [8]

> в имени папки у тебя нет точки

Замечено, что винда заменяет аривиатуру «*.*» на «*» сама.


> По прежнему 18 файлов

Вот так попробуй:
GetFileCount(sPath+"\"+SR.Name)


 
=Guest=   (2007-04-07 20:08) [9]


> Вот так попробуй:


Да я так уже пробовал без результата

> в имени папки у тебя нет точки

Чего то туплю я это маска поиска если сделать скажем *.txt Будет искать только txt файлы


 
=Guest=   (2007-04-07 20:11) [10]

пробовал добавить в код следующее
if (Sr.Attr and faDirectory)=faDirectory
      then GetFileCount(sPath+SR.Name)
       else
          begin
           inc(iFileCount);
           Form1.ListBox1.Items.Add(SR.Name);
          end;
    end;

В ListrBox1 отображаются 18 файлов в папке www.
Пробовал пошагово выполнить вообще ерунда какая то получается


 
homm ©   (2007-04-07 20:22) [11]

> [10] =Guest=   (07.04.07 20:11)
> пробовал добавить в код следующее
> if (Sr.Attr and faDirectory)=faDirectory
>      then GetFileCount(sPath+SR.Name)
>       else

Это тупиковый вариант! Тебе нужно к текущему количеству файлов прибавлять из подпапок, а ты этого не делаешь.

if (Sr.Attr and faDirectory)=faDirectory
     then iFileCount := iFileCount + GetFileCount(sPath+SR.Name)


 
=Guest=   (2007-04-07 20:22) [12]

Все разобрался.
Спасибо всем кто принял участие в обсуждении. Всех с наступающим праздником!!!!
Еще раз огромное спасибо

Тема закрыта


 
=Guest=   (2007-04-07 20:23) [13]

homm
Вы правы. Спасибо



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

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

Наверх




Память: 0.47 MB
Время: 0.04 c
15-1175328227
VirEx
2007-03-31 12:03
2007.04.29
сжатие траффика, как настроить MirandaIM (ICQ,IRC,MRA) для CProxy


2-1176025604
kate_1
2007-04-08 13:46
2007.04.29
помогите составить программу в Delphi6


2-1176009000
Roman_S
2007-04-08 09:10
2007.04.29
есть Интернет? --> какой ip?


9-1148392549
Другой
2006-05-23 17:55
2007.04.29
Программа - резак для BMP


4-1164976076
SS-ALX
2006-12-01 15:27
2007.04.29
Как с помощью WinAPI (EDM) программно оключить устройство





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