![]() |
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]() ![]() ![]() |
|
Stibrus |
|
|||
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 2.3.2006 Репутация: нет Всего: нет |
Добрый день!
Может быть, кто-нибудь сталкивался с той проблемой, что FileDateToDateTime ( FileAge ( FileName ) ) иногда ошибается на 1-2 секунды? И может, кто-нибудь придумал, как это лечить? Мне надо преобразовать дату модификации в строку, а иного пути выйти на DateTimeToStr нет Заранее спасибо! |
|||
|
||||
Romikgy |
|
|||
![]() Любитель-программер ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7326 Регистрация: 11.5.2005 Где: Porto Franco Odes sa Репутация: 26 Всего: 146 |
вот так в хелпе 1. это существено? 2. А как проверяешь что есть ошибка? -------------------- Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. ![]() |
|||
|
||||
Stibrus |
|
|||
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 2.3.2006 Репутация: нет Всего: нет |
Задачка, связанная с CVS
CVS считает, что файл изменен, если строка даты/времени файла, хранящаяся в служебном файле CVS/Entries, не совпадает с точностью до секунд с датой/временем изменения файла (с учетом разницы с GMT). На этом ошибка и была поймана - при приведении даты/времени в служебном файле к той дате/времени, которую выдает FileAge, выскакивает ошибка в 1 секунду (один раз заметил 2). Ошибка встречается примерно в 5% случаев. Это я рассказал к тому, что проблема действительно довольно существенная ![]() Это сообщение отредактировал(а) Stibrus - 28.3.2006, 19:50 |
|||
|
||||
Poseidon |
|
|||
![]() Delphi developer ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 5273 Регистрация: 4.2.2005 Где: Гомель, Беларусь Репутация: 53 Всего: 133 |
Обычно, слежение за изменен/не изменен файл делается не по дате последнего изменения, а по контрольной сумме (CRC) файла
-------------------- Если хочешь, что бы что-то работало - используй написанное, если хочешь что-то понять - пиши сам... |
|||
|
||||
Romikgy |
|
|||
![]() Любитель-программер ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7326 Регистрация: 11.5.2005 Где: Porto Franco Odes sa Репутация: 26 Всего: 146 |
Stibrus, давай определимся
почему ты считаешь что это является правильнее чем Это? И зачем такая точность? Я не совсем знаю , что это такое, подозреваю прога для слежения за исходниками, я прав? -------------------- Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. ![]() |
|||
|
||||
Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 192 Всего: 484 |
Система контроля версий. Проверить кто прав легко. Просто взять найденный файл и посмотреть его св-ва, как их показывает винда. Это и будет правильный результат. |
|||
|
||||
Stibrus |
|
|||
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 2.3.2006 Репутация: нет Всего: нет |
Snowy , все совершенно верно, так я и "поймал" ошибку.
2 Romikgy: CVS - система слежения за версиями исходных файлов, крайне полезная когда над проектом работает группа разработчиков. Немножко углубляясь в задачу, скажу, что мне надо было сделать так, чтобы WinCVS считал файлы неизмененными. Как я уже говорил ранее, путь для этого только один - проставить в служебном файле реальную дату модификации файла. Тут-то и вышел затык - примерно 5% файлов получили погрешность в строке, представляющей эту дату. Сравнив в Explorer дату/время модификации файла с CVSными, я убедился, что CVS все делает правильно. Отсюда делаю вывод - ошибается приложение на Дельфи. Далее - два варианта. Либо ошибается FileAge, но (имхо) это просто невозможно, эта функция работает "напрямую" с системой А явная причина - ошибка пересчета даты/времени из Integer в Float в FileDateToDateTime В общем, надо делать свою функцию формирования строки на основании даты/времени, возвращаемой FileAge Это сообщение отредактировал(а) Stibrus - 29.3.2006, 10:52 |
|||
|
||||
Romikgy |
|
|||
![]() Любитель-программер ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7326 Регистрация: 11.5.2005 Где: Porto Franco Odes sa Репутация: 26 Всего: 146 |
GetFileAttributesEx
GetFileInformationByHandle может это поможет? Добавлено @ 11:16 GetFileTime CompareFileTime -------------------- Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. ![]() |
|||
|
||||
Stibrus |
|
|||
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 2.3.2006 Репутация: нет Всего: нет |
Помимо GetAge опробованы следующие методы:
1. Через TSearchRec 2. FileGetDate() Оба дали одинаковый результат (т.е. неудовлетворительный) Вывод: дело все же в FileDateToDateTime() ![]() |
|||
|
||||
Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 192 Всего: 484 |
Так мы избегаем погрешностей TDateTime, который, как известно Double. А Double = погрешность. |
|||
|
||||
Stibrus |
|
|||
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 2.3.2006 Репутация: нет Всего: нет |
Спасибо, попробую, если все ок - процитирую получившуюся функцию формирования строки в формате CVS (может, кому-нибудь пригодится)
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "Delphi: Общие вопросы" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |