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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 12.05.2008, 23:31   #1
NeiL
Пользователь
 
Регистрация: 28.11.2007
Сообщений: 49
По умолчанию Как проверить изменялся ли файл

Подскажите, как проверить изменялся ли файл. Задача следующая: имеется форма с компонентом TMemo. В него загружаю текст из некоего текстового файла - Memo.Lines.LoadFromFile(const_def_F ilePath). Теперь открываю этот же файл из Блокнота и дописываю в него какой-нибудь текст. Теперь при возвращении в окно своего приложения (Delphi) необходимо проверить изменялся ли файла, и если данное имело место быть вывести сообщение. ShowMessage('File modified. Reload file ?').
NeiL вне форума Ответить с цитированием
Старый 13.05.2008, 00:08   #2
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,542
По умолчанию

как ты узнаешь что файл был изменен скажем последние пять минут? Tак и программа перед сохранением может проверить что файл был изменен с момента загрузки.
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 13.05.2008, 12:34   #3
Dj_smart
Капсула от спама
Форумчанин
 
Аватар для Dj_smart
 
Регистрация: 04.03.2008
Сообщений: 779
Радость

Создай еще одну memo маленькую и невидимую и добавь в form1.oncreate
Код:
Screen.OnActiveControlChange := AppControlChange;
и саму процедуру
Код:
procedure TForm1.AppControlChange(Sender: TObject);
begin
  memo2.lines.loadfromfile(file);
  if memo2.lines<>memo1.lines then showmessage('blablabla');
end;
И теперь она будет вызыватся при смене фокуса и проверять не изменился ли.
И дело в шляре)))
Если данный ответ не столь конкретен, как Вы желаете его увидеть, возможно необходимо поразмыслить, стоит ли вопрос того, чтобы о нём спрашивать на форуме?
CncFiles.ru - бесплатный файловый хостинг
Dj_smart вне форума Ответить с цитированием
Старый 13.05.2008, 13:01   #4
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,929
По умолчанию

Я так понял программа в это время запущена пока в открытом файле Блокнотом правят? Если нужно это предотвратить, открывай файл с запрещением повторного открытия, если просто определить изменения то иметь копию Memo в памяти и определять изменения по OnActivate, загрузив этот Мемо из файла. Можно также для сравнения свойство Text у Мемо заюзать.
Код:
Form1.Activate(...);
begin
MemoCopy.LoadFromFile(...);
MemoOrigin.Text <> MemoCopy.Text then ...
end;
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог

Последний раз редактировалось mutabor; 13.05.2008 в 13:07.
mutabor вне форума Ответить с цитированием
Старый 13.05.2008, 13:05   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Вообще то (автору) пока в блокноте не нажмеш ^S файл не изменится.
В принципе можно откопать хендл окна блокнота, и просто получить по нему содержимое окна.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 13.05.2008, 13:12   #6
Hollander
Участник клуба
 
Аватар для Hollander
 
Регистрация: 03.05.2007
Сообщений: 1,189
По умолчанию

Используй мониторинг файлов, поищи в нете я где-то видел исходник.
Hollander вне форума Ответить с цитированием
Старый 13.05.2008, 13:14   #7
Dj_smart
Капсула от спама
Форумчанин
 
Аватар для Dj_smart
 
Регистрация: 04.03.2008
Сообщений: 779
По умолчанию

Цитата:
Сообщение от mutabor Посмотреть сообщение
Можно также для сравнения свойство Text у Мемо заюзать
попутал..... Там вместо lines Text.
Если данный ответ не столь конкретен, как Вы желаете его увидеть, возможно необходимо поразмыслить, стоит ли вопрос того, чтобы о нём спрашивать на форуме?
CncFiles.ru - бесплатный файловый хостинг
Dj_smart вне форума Ответить с цитированием
Старый 14.05.2008, 10:56   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

я полностью согласен с Hollander.
Пути два - либо, более грамотный подход через WinAPI -
ReadDirectoryChangesW (будет работать только под WinNT/2000/XP/Vista)
мониторинг папки

либо банально вешаться на таймер (например, раз в 30 сек., чтобы не грузить систему) и проверять изменился ли файл (дата последней модификации/размер)

первый способ лучше, но сложнее ;-)

Последний раз редактировалось Serge_Bliznykov; 14.05.2008 в 11:09.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 14.05.2008, 11:04   #9
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
первый способ лучше, но сложнее ;-)
Чем же он сложен? Это лучший способ для легеньких програмулинок, но повторюсь - он не сработает пока в блокноту не дадут команду сохранения
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 14.05.2008, 20:15   #10
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Виталий, ну Вы же прекрасно понимаете, что пока файл не сохранили - он НЕ ИЗМЕНИЛСЯ! мы же с Вами говорим именно про ФАЙЛ (а не про текст, который находится в какой-то программе редактирования, кстати, которую получить так просто может и не удастся - у меня, например, штатный редактор Windows заменён на AkelPad (на порядок удобнее и лучше).
Автор вопроса хочет сделать то, что умеет, например, та же Дельфи - откройте проект, потом перейдите в редактор и измените любой файл из открытого в IDE Delphi проекта - получите сообщение:
Модуль 'ваш_файл.ляля's time/date change. Reload?
но произойдёт в момент СОХРАНЕНИЯ ваших изменений, а не тогда, когда Вы в редакторе FAR (к примеру ;-) будете эти изменения вносить!
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проверить тип переменной satana Общие вопросы Delphi 10 20.11.2010 21:43
Как проверить строку? nikleb PHP 6 07.07.2008 22:04
Проверить кратность трем Anita_i Паскаль, Turbo Pascal, PascalABC.NET 2 11.05.2008 10:14
Как проверить, есть ли файл? Dux Общие вопросы Delphi 3 02.04.2008 23:18