Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.10.2010, 00:10   #1
Fok
Пользователь
 
Регистрация: 15.05.2010
Сообщений: 43
По умолчанию Время изменения файла

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

Вот что получилось
Код:
function GetFileDate(FileName: string): string;
var   FHandle: Integer;
begin 
  FHandle := FileOpen(FileName, 0);
 try
  Result := DateTimeToStr(FileDateToDateTime(FileGetDate(FHandle)));
 finally
  FileClose(FHandle);
end; 
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  n:=(GetFileDate('test.exe'));
end;

procedure TForm1.Timer2Timer(Sender: TObject);
begin
  
  k:=(GetFileDate('test.exe'));
  while n<>k do
    begin
  showmessage(' файл был изменён ');
    end;
end;
Но при запуске кода выскакивает мессага , что нетак и как эту проверку реализовать правильно
Fok вне форума Ответить с цитированием
Старый 04.10.2010, 01:50   #2
DedBoroda
Пользователь
 
Аватар для DedBoroda
 
Регистрация: 15.08.2010
Сообщений: 49
По умолчанию

Код:
procedure TForm1.Timer2Timer(Sender: TObject);
begin
  
  k:=(GetFileDate('test.exe'));
  while n<>k do
    begin
  showmessage(' файл был изменён ');
    end;
end;
Что делает этот код? Он делает следующее:
С каждым тиком таймера зацикливается навсегда(зависает) в цикле while.(при положительном условии)
Решение - убрать лишний цикл.
Код:
procedure TForm1.Timer2Timer(Sender: TObject);
begin  
  k:=(GetFileDate('test.exe'));
  if n<>k then
    begin
       showmessage(' файл был изменён ');
    end;
end;
А еще лучше будет если убрать лишний таймер.
Код:
procedure TForm1.Timer1Timer(Sender: TObject);
begin  
  k:=(GetFileDate('test.exe'));
  if n<>k then
    begin
       showmessage(' файл был изменён ');
       n:=k; {добавил для предотвращения спама месаг, хотя это очевидно}
    end else n:=k; {n задается заранее, например в FormCreate}
end;

Последний раз редактировалось DedBoroda; 04.10.2010 в 16:22.
DedBoroda вне форума Ответить с цитированием
Старый 04.10.2010, 06:51   #3
Fok
Пользователь
 
Регистрация: 15.05.2010
Сообщений: 43
По умолчанию

Так тоже неодитсь потомучто при первой смене времени сохранения n останется старой , сдесь должен быть метод постоянного сравнения между n и k
Fok вне форума Ответить с цитированием
Старый 04.10.2010, 07:27   #4
Sparkman
220400
Форумчанин
 
Аватар для Sparkman
 
Регистрация: 21.05.2010
Сообщений: 726
По умолчанию

Цитата:
Сообщение от Fok Посмотреть сообщение
Так тоже неодитсь потомучто при первой смене времени сохранения n останется старой , сдесь должен быть метод постоянного сравнения между n и k
в этом и заключается смысл - сравниваются две переменные, в одной из которых содержится старое значение даты изменения файла, а в другой - считываемое по таймеру значение даты изменения файла.
Cерьёзной помощи не ждите - помогаю в перерывах на "перекур".
Не существует ничего невозможного для человека, который не собирается ничего делать сам.
Не учите человека, если вы не его учитель.
Sparkman вне форума Ответить с цитированием
Старый 04.10.2010, 16:13   #5
DedBoroda
Пользователь
 
Аватар для DedBoroda
 
Регистрация: 15.08.2010
Сообщений: 49
По умолчанию

Цитата:
Так тоже неодитсь потомучто при первой смене времени сохранения n останется старой , сдесь должен быть метод постоянного сравнения между n и k
Вдумайтесь, пожалуйста, в алгоритм кода выше

Подсказка:
k-n=timer.interval

Последний раз редактировалось DedBoroda; 04.10.2010 в 16:27.
DedBoroda вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как узнать время изменения файла Assemblerru Общие вопросы C/C++ 2 26.03.2010 20:47
Дата и время изменения файла Demien Общие вопросы Delphi 5 24.11.2009 12:36
Дата последнего изменения файла GrindeX Паскаль, Turbo Pascal, PascalABC.NET 2 26.05.2009 17:22
время и дата изменения файла dimonbest Общие вопросы Delphi 3 12.03.2008 06:51