2010-12-30 19 views
1

Я обновляю некоторые устаревшие коды для более эффективного использования файлов .ini для хранения параметров. В принципе, он кэширует все настройки внутри, как только они будут прочитаны, чтобы их можно было прочитать снова, не открывая файл. Перед использованием кеша я сравниваю время создания кэша с последним измененным временем файла и воссоздаю кеш с обновленным файлом. Это отлично работает, если пользователи не переименовывают файлы, потому что это действие не обновляет последнее измененное время.Как узнать, был ли файл переименован?

Так что, если я копирую мой app.ini в app - copy.ini, изменять app - copy.ini вне моей программы, а затем удалить app.ini и переименуйте копию app.ini, моя программа теперь использует устаревший кэш. Даже если моя программа поймала удаление app.ini и очистила кеш, она не пересобирала кеш, когда копия была переименована. Программа предназначена для работы в течение очень долгого времени без присмотра, поэтому я бы хотел избежать постоянного контроля над файлом - только проверьте его, как только мне нужно будет прочитать параметр.

+0

Предположительно вы проверили, что это будет действительно добиться прироста производительности, что пользователи будут рассматривать целесообразны? – MarkJ

+0

@MarkJ - Нет, еще нет. Я просто написал код кеширования и вскоре проведу тестирование производительности. Это было главным образом упражнение, чтобы переоценить себя с VB6, но если это приведет к повышению производительности, это потрясающе. Но мой главный вопрос заключался в обнаружении переименованных файлов - конкретное приложение является лишь примером. Наблюдатель за файлами, вероятно, решает проблему, но на самом деле не отвечает на вопрос. – dlras2

+2

«NTFS задерживает обновление до последнего времени доступа к файлу на срок до одного часа после последнего доступа». Это связано с тем, что эти временные метки предназначены для атрибутов с низкой волатильностью для уменьшения накладных расходов файловой системы. Файлы INI не должны быть очень волевыми, что делает редактирование вручную внешне возможным. Если вам нужен более жесткий контроль над процессом, вы должны предоставить пользовательский интерфейс настроек, чтобы пользователи не изменяли напрямую. Затем вы можете использовать свои собственные временные метки высокой волатильности в данных, если это необходимо, контролируемым образом. Положитесь на кэширование файлов на системном уровне для повышения производительности. – Bob77

ответ

1

Что вы нуждаясь является FileWatcher для VB6, вы могли бы попробовать это Interop с .net или использовать что-то вроде этого VB6 Implementation

+0

Я думаю, что это то, что я сделаю. Было бы неплохо узнать, могу ли я обнаружить изменения в файле, используя его атрибуты, т. К. – dlras2

+0

Возможно, вам стоит попробовать посмотреть атрибут архива, он включен, когда файл был изменен. –

0

Для этого сценария вы можете сохранить хэш содержимого каждого файла .ini, который программа использует и периодически проверяет каждый файл. Если хэш отличается от того, что было в последний раз, когда вы проверяли его содержимое, оно было изменено или это другой файл, вызванный этим переименованием.

+0

Проблема в том, что я пытаюсь повысить производительность, не открывая файл каждый раз, когда мне нужно получить настройки. Выполнение хэша на всем этом не было бы хорошим решением для этого. – dlras2