Проверить, есть ли в папке файлы?

Модератор: Модераторы

Проверить, есть ли в папке файлы?

Сообщение Andreich » 02.03.2009 15:32:38

Вопрос : Необходимо написать софтину, которая будет проверять появились ли в папке файлы. С лазарусом столкнулся впервые, не много раньше рботал с делфи. Подскажите, как реализовать такую задачку?

Ответ : 1
Среда : FreePascal, Lazarus
Операционная система : любая
Зависимости : -
Источник : http://freepascal.ru/forum/viewtopic.php?f=5&t=3814
Теги : файлы, поиск

Можно реализовать используя подход, основанный на учете количества файлов (можно даже по типу).
Если папка пустая, то функция возвращает 0, иначе - число файлов соответствующих маске.

Код: Выделить всё
function GetFileCount(dir : string):integer;
var fs : TSearchRec;
begin
  Result:=0;
  if FindFirst(dir+'/*.*',faAnyFile-faDirectory-faVolumeID, fs)=0 then
  repeat
   inc(Result);
  until FindNext(fs)<>0;
  FindClose(fs); // если не работает (для win32), заменить на SysUtils.FindClose(fs);
end;
Andreich
постоялец
 
Сообщения: 268
Зарегистрирован: 17.04.2008 12:33:43

Re: Проверить, есть ли в папке файлы?

Сообщение prays » 08.06.2010 12:00:40

Код: Выделить всё
function GetCount(dir:String):Integer;
var
   // Объект поиска
   F:TSearchRec;
   // Счетчик найденых файлов
   I:Integer;
begin
     // Сбрасываем на 0 перед началом
     i:=0;
     // Возвращаем результат функции 0
     GetCount:=i;
     // Ищем файл в указанной папке по заданому расширению
     if FindFirst(dir+'*.*',faAnyfile,F)=0 then
     repeat
           // Если файл не равен каталогу и подкаталогу то
           if (F.Name<>'.') and (F.Name<>'..') then
           begin
                // Начисляем счетчик
                inc(I);
           end;
           // До тех пор пока в папке не останется неодного файла
     until FindNext(F)<>0;
     // Закрываем объект поиска
     FindClose(F);
     // Возвращаем результат функции
     GetCount:=I;
end;


Все отличе в том что *.* в этом то и соль что функция findfirst найдет "." и ".." и скажет что файл в папке есть так как это тоже файлы :) а вот сюрприз цыкл для мониторинга за папкой
...
Код: Выделить всё
Writeln(' im looking in /home/alex/temp/ ');  // Печатаем строку
Writeln(' is empty...'); .. и еще печатаем строку
repeat
           sleep(1); // говорим процессору спать чтоб он больно сильно не трефожился и не  грузился
           // во время ожидания
           i:=GetCount('/home/alex/temp/'); // i будет принимать значение функции каждый момент времени
until i >0; // Как только i станет больше 0 то выходим из цыкла
WriteLn('ok! '+inttostr(i)+' file found in dir!'); // Поздровляем с найденым файлом


:) В моент появления в папке файла процесс оборвется и выведет сообщение
ну а чтоб не обрывался и постоянно показывал сколько файлов в папке сделайте так

Код: Выделить всё
var
    i:integer;
    stop:boolean=false;
    gx,gy:byte;

Writeln(' im looking in /home/alex/temp/ ');  // Печатаем строку
Writeln(' is empty...'); .. и еще печатаем строку
repeat
           sleep(1); // говорим процессору спать чтоб он больно сильно не трефожился и не  грузился
           // во время ожидания
           i:=GetCount('/home/alex/temp/'); // i будет принимать значение функции каждый момент времени
           gx:=whereX;
           gy:=whereY;
           WriteLn('ok! '+inttostr(i)+' file found in dir!'); // Поздровляем с найденым файлом
           gotoxy(gx,gy); 

until  stop; // Как только stop станет истиной то выходим из цыкла
prays
незнакомец
 
Сообщения: 3
Зарегистрирован: 07.06.2010 20:56:23


Вернуться в Файловая система

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

Рейтинг@Mail.ru