Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Отследить время изменения файла 
:(
    Опции темы
Штабс
Дата 30.11.2004, 10:51 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Собственно задача ясна из названия темы
есть файл...
smile
и требуется отследить время его последней модификации

прошу только не предлагать
алгоритмы типа
скопировать в новый
стереть старый
переиминовать


файл меняет ДРУГОЕ ( не мое ) приложение

и вообще возможно ли это?
  Вверх
unreg
Дата 30.11.2004, 11:27 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Код

var stop:boolean = false;
.............

procedure TForm1.Button1Click(Sender: TObject);
var Notifi:THandle;
begin
 Notifi:=FindFirstChangeNotification('C:\',false,FILE_NOTIFY_CHANGE_LAST_WRITE);
 While stop<>true do
 begin
   if WaitForSingleObject(ChNnf,0)=WAIT_OBJECT_0 then
       Caption:='Файл изменился '+DateTimeToStr(Now);  
   FindNextChangeNotification(Notifi);
   Application.ProcessMessages;
 end;
 FindCloseChangeNotification(Notifi);
end;


Это сообщение отредактировал(а) Girder - 30.11.2004, 16:53
  Вверх
Jureth
Дата 30.11.2004, 13:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 74
Регистрация: 23.11.2004
Где: где-то в Западной Сибири

Репутация: нет
Всего: 3



Сий алгоритм, ИМХО, лучше запускать в отдельном потоке.

А вообще в D7 уже есть компонент, выполняющий эти действия, но он, ИМХО, немного глючный (в смысле - пропускает иногда события). Называется - ShellChangeNotifier на вкладке Samples
PM   Вверх
Штабс
Дата 30.11.2004, 15:24 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











так метод с потоками реализовал...
все ОК

А вот с ShellChangeNotifier
затык
найти то нашел
а вот юзать не могу
если быть честным то не умею
поможете?
  Вверх
Штабс
Дата 30.11.2004, 15:54 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











кстати уважаемый UNREG

в вашем коде
или ошибка или я не понимаю

WaitForSingleObject(ChNnf,0)=WAIT_OBJECT_0 then


так что же это такое ChNnf?
  Вверх
Girder
Дата 30.11.2004, 16:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лентяй 2
***


Профиль
Группа: Участник Клуба
Сообщений: 1993
Регистрация: 12.5.2004

Репутация: 25
Всего: 155



Для потока smile
Код
procedure Твой поток.Execute;
var FNotifier: THandle;
      FRoot: String;
begin
FRoot:='C:\';
FNotifier:=FindFirstChangeNotification(PChar(FRoot),false,File_Notify_Change_Last_Write);
Win32Check(FNotifier<>Invalid_Handle_Value);
try
 while not(Terminated) do
  begin
   case WaitForSingleObject(FNotifier,Infinite) of
    Wait_Failed:Terminate;
    Wait_Object_0:Synchronize(UpdateLog);
   end;
   FindNextChangeNotification(FNotifier);
  end;
finally
 FindCloseChangeNotification(FNotifier);
end;
end;

procedure Твой поток.UpdateLog;
begin
Form1.Caption:='Что-то в данной дирректории изменилось!';
end;


Удачи.

Это сообщение отредактировал(а) Girder - 30.11.2004, 16:55


--------------------
Как слышим, так и пишим.
Истина где-то там...
PM   Вверх
Guest
Дата 30.11.2004, 17:17 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











smile
Я так и думал...кстати мой поток аналогичен Вашему, г-н Grider...
вопрос задавался для очистки совести...
я увы ведь не могу все знать... smile

так теперь остался вопрос с Shelom smile
  Вверх
unreg
Дата 1.12.2004, 08:22 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Уважаемы Guest, по поводу:

WaitForSingleObject(ChNnf,0)=WAIT_OBJECT_0 then


так что же это такое ChNnf?

Поясняю. Этот кусок я выдернул из своего кода. Для придания ему более понятного вида, я выкинул из него все не относящееся к вопросу и заменил ChNnf на Notifi. В этой строке, я, элементарно, пропустил замену (такое бывает). Интересно, чтобы вы делали прочитав ответ на свой вопрос в DRKB? Вы вообще его читали?

Jureth Можно и в отдельном, а можно и нет. Если второй параметр в WaitForSingleObject равен 0, то функция возвращает значение немедленно, какое бы оно нибыло. Для недолгих операций очень даже можно пользоваться, и не надо следить за потоками.
  Вверх
Guest
Дата 1.12.2004, 09:55 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Уважаемы Guest, по поводу:

WaitForSingleObject(ChNnf,0)=WAIT_OBJECT_0 then


так что же это такое ChNnf?

Поясняю. Этот кусок я выдернул из своего кода. Для придания ему более понятного вида, я выкинул из него все не относящееся к вопросу и заменил ChNnf на Notifi. В этой строке, я, элементарно, пропустил замену (такое бывает).



Добрый день UNREG
кстати сегодня первый календарный день зимы

объясняю свой вопрос...
по тексту было понятно что вместо ChNnf надо было ставить определенный ранее Notifi....
что я и сделал
но осталось сомнение, что ChNnf определенная системная структура...типа Chenge_Notifaction...сокращенное до ChNnf...и опсианный в каком нибудь модуле...
так как BP7 ругается значит я его не подсоединил....или его нет?

поэтому я переделал на Notifi...проверил работает или нет...
и НАВСЯКИЙ случай закинул вопрос
уф... smile


Интересно, чтобы вы делали прочитав ответ на свой вопрос в DRKB? Вы вообще его читали?
Опля!
Нет не читал...где это?

Jureth Можно и в отдельном, а можно и нет. Если второй параметр в WaitForSingleObject равен 0, то функция возвращает значение немедленно, какое бы оно нибыло. Для недолгих операций очень даже можно пользоваться, и не надо следить за потоками.
Всем. Сделано и так и так. Не парьтесь как лучше

  Вверх
unreg
Дата 1.12.2004, 13:05 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Да, всех с первым днем зимы. DRKB - фак этого (и не только) форума . спасибо Vit-у, и тем кто ему помогал. Очень качественная и полезная вещь. Посмотрите в важных темах, там есть ссылка для скачивания.

  Вверх
Guest
Дата 1.12.2004, 17:11 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Уважаемый UNREG
DRKB скачал.
Вешь и впрямь полезная...я бы даже сказал настольная.
но Вас я не нашел...
подскажите где вы?
PS не хочется пошлить...
но вызывает улыбку
чуть не написал DRKPB smile
по аналогии с ВРКПБ
  Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: WinAPI и системное программирование"
Snowybartram
MetalFanbems
PoseidonRrader
Riply

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • 99% ответов по WinAPI можно найти в MSDN Library, оставшиеся 1% здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема »


 




[ Время генерации скрипта: 0.0534 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.