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

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

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

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

Сообщение pehser » 05.11.2008 12:18:32

Вот не обходимо написать софтину котарая будет проверять появились ли в папке файлы. С лазарусом столкнулся в первые не много раньше рботал с делфи. Подскажите как реализотать такую задачку
pehser
новенький
 
Сообщения: 16
Зарегистрирован: 01.08.2008 14:54:00

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

Сообщение alexs » 05.11.2008 14:20:35

Для винды:
посмотри в винде функцию - FindFirstChangeNotification
насколько помню - именно она возвращает тебе событие при изменении в заинтересованном каталоге. Всё делается точно также как в дельфи.
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4060
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

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

Сообщение Andreich » 05.11.2008 15:17:34

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;
Andreich
постоялец
 
Сообщения: 268
Зарегистрирован: 17.04.2008 12:33:43

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

Сообщение pehser » 06.11.2008 14:28:33

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"
pehser
новенький
 
Сообщения: 16
Зарегистрирован: 01.08.2008 14:54:00

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

Сообщение Padre_Mortius » 06.11.2008 14:44:15

Нужно заменить
Код: Выделить всё
FindClose(fs)
на
Код: Выделить всё
SysUtils.FindClose(fs)
Padre_Mortius
энтузиаст
 
Сообщения: 1265
Зарегистрирован: 29.05.2007 17:38:07
Откуда: Спб

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

Сообщение Andreich » 06.11.2008 15:10:25

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

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

А у меня и без замены работает! (сижу под Linux)
Andreich
постоялец
 
Сообщения: 268
Зарегистрирован: 17.04.2008 12:33:43

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

Сообщение pehser » 06.11.2008 15:39:22

Andreich
ну видемо нюанс из того что винда
pehser
новенький
 
Сообщения: 16
Зарегистрирован: 01.08.2008 14:54:00

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

Сообщение Vadim » 06.11.2008 16:36:24

В модуле Windows тоже описана процедура FindClose() для WinAPIшного поиска файлов. В Linux такого модуля нет.
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск


Вернуться в Lazarus

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

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

Рейтинг@Mail.ru