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

Вопросы программирования и использования среды Lazarus.

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

Ответить
pehser
новенький
Сообщения: 16
Зарегистрирован: 01.08.2008 14:54:00

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

Сообщение pehser »

Вот не обходимо написать софтину котарая будет проверять появились ли в папке файлы. С лазарусом столкнулся в первые не много раньше рботал с делфи. Подскажите как реализотать такую задачку
Аватара пользователя
alexs
долгожитель
Сообщения: 4069
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь
Контактная информация:

Сообщение alexs »

Для винды:
посмотри в винде функцию - FindFirstChangeNotification
насколько помню - именно она возвращает тебе событие при изменении в заинтересованном каталоге. Всё делается точно также как в дельфи.
Andreich
постоялец
Сообщения: 268
Зарегистрирован: 17.04.2008 12:33:43

Сообщение Andreich »

pehser писал(а):Вот не обходимо написать софтину котарая будет проверять появились ли в папке файлы.

Можно реализовать используя подход, основанный на учете количества файлов (можно даже по типу).
Если папка пустая, то функция возвращает 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);
end;
pehser
новенький
Сообщения: 16
Зарегистрирован: 01.08.2008 14:54:00

Сообщение pehser »

Andreich писал(а):
pehser писал(а):Вот не обходимо написать софтину котарая будет проверять появились ли в папке файлы.

Можно реализовать используя подход, основанный на учете количества файлов (можно даже по типу).
Если папка пустая, то функция возвращает 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);
end;


ругается на строку
FindClose(fs);
unit1.pas(65,15) Error: Incompatible type for arg no. 1: Got "TSearchRec", expected "LongWord"
Padre_Mortius
энтузиаст
Сообщения: 1265
Зарегистрирован: 29.05.2007 17:38:07
Откуда: Спб

Сообщение Padre_Mortius »

Нужно заменить

Код: Выделить всё

FindClose(fs)
на

Код: Выделить всё

SysUtils.FindClose(fs)
Andreich
постоялец
Сообщения: 268
Зарегистрирован: 17.04.2008 12:33:43

Сообщение Andreich »

pehser
Ругается на строку FindClose(fs);

Padre_Mortius
Нужно заменить FindClose(fs) на SysUtils.FindClose(fs)

А у меня и без замены работает! (сижу под Linux)
pehser
новенький
Сообщения: 16
Зарегистрирован: 01.08.2008 14:54:00

Сообщение pehser »

Andreich
ну видемо нюанс из того что винда
Vadim
долгожитель
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Сообщение Vadim »

В модуле Windows тоже описана процедура FindClose() для WinAPIшного поиска файлов. В Linux такого модуля нет.
Ответить