Модераторы: feodorv, GremlinProg, xvr, Fixin
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> максимально быстро получить список файлов новее оп, ределенной даты 
:(
    Опции темы
boostcoder
Дата 18.9.2012, 12:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

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



привет.

есть необходимость получать список файлов новее некоторой даты. желательно это сделать максимально быстро. возможно, при использовании WINAPI можно закодить что-то более оптимальное чем перебор всех файлов.
сейчас, для решения это задачи используется гнутая утилита find с ключиком '-newer some_file'. для сканирования необходимого дерева требуется 2-5 минут, что невероятно долго.

спасибо.

PM WWW   Вверх
xvr
Дата 18.9.2012, 16:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 40
Всего: 223



Для поиска в Win используется FindFirstFile[Ex]. Она не умеет искать по дате. Но можно ускорить процесс поиска, если проверять дату последней модификации на директориях и не ходить в них, если у них дата раньше интересующей (на FAT может не сработать - не помню, обновляется ли у нее дата на директории)

PM MAIL   Вверх
boostcoder
Дата 18.9.2012, 18:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

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



Цитата(xvr @  18.9.2012,  16:20 Найти цитируемый пост)
если проверять дату последней модификации на директориях

а если изменяется/создается файл в этой директории, дата ее модификации тоже изменяется? а если файл в поддиректории?

PM WWW   Вверх
KaZepKa
Дата 18.9.2012, 19:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



у меня на 7рке на нтфс дата у директории не меняется
точней меняется только у папки в которой лежит файл, а уровнем выше все как было

Это сообщение отредактировал(а) KaZepKa - 18.9.2012, 19:03
PM MAIL   Вверх
boostcoder
Дата 18.9.2012, 19:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

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



Цитата(KaZepKa @  18.9.2012,  19:01 Найти цитируемый пост)
меняется только у папки в которой лежит файл, а уровнем выше все как было

какая-то полумера получается...
PM WWW   Вверх
xvr
Дата 18.9.2012, 19:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 40
Всего: 223



Увы да - не меняет, хотя по идее должно  smile Тогда только полное сканирование.

А надо найти именно файлы новее некоторой даты, или отслеживать модификации? Для второго есть спец. функции в WinAPI
PM MAIL   Вверх
boostcoder
Дата 18.9.2012, 19:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

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



Цитата(xvr @  18.9.2012,  19:19 Найти цитируемый пост)
А надо найти именно файлы новее некоторой даты, или отслеживать модификации?

отслеживание - было бы хорошо. но если вдруг оно(отслеживание) по какой-то причине вдруг отвалится или что-то пропустит - щитай ахтунг smile 
PM WWW   Вверх
xvr
Дата 18.9.2012, 21:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 40
Всего: 223



Цитата(boostcoder @  18.9.2012,  19:26 Найти цитируемый пост)
но если вдруг оно(отслеживание) по какой-то причине вдруг отвалится или что-то пропустит

Оно может отвалится только если программа, которая его запрашивала, упадет. А так обычные функции работы с файлами, нечему там отваливаться
смотрите ReadDirectoryChangesW
Ну и еще Change Journals для полноты картины

PM MAIL   Вверх
boostcoder
Дата 18.9.2012, 21:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

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



Цитата(xvr @  18.9.2012,  21:34 Найти цитируемый пост)
Оно может отвалится только если программа, которая его запрашивала, упадет.


это я понимаю... нужно обдумать наихудшие сценарии..
PM WWW   Вверх
feodorv
Дата 18.9.2012, 23:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2214
Регистрация: 30.7.2011

Репутация: 9
Всего: 45



Цитата(boostcoder @  18.9.2012,  22:49 Найти цитируемый пост)
нужно обдумать наихудшие сценарии..

А таких немного. Основной - изменений может быть слишком много, и тогда приёмный буфер может переполниться. Если файловое дерево находится на сетевом компе, то сеть может отвалиться. В таких случая придётся начинать сначала - полное пересканирование и заказ уведомлений по-новой.



--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
boostcoder
Дата 19.9.2012, 00:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

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



Цитата(feodorv @  18.9.2012,  23:36 Найти цитируемый пост)
приёмный буфер может переполниться

это что такое?
почему он может переполняться?

Цитата(feodorv @  18.9.2012,  23:36 Найти цитируемый пост)
придётся начинать сначала

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

PM WWW   Вверх
feodorv
Дата 19.9.2012, 00:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2214
Регистрация: 30.7.2011

Репутация: 9
Всего: 45



Цитата(boostcoder @  19.9.2012,  01:10 Найти цитируемый пост)
почему он может переполняться?

Цитата

When you first call ReadDirectoryChangesW, the system allocates a buffer to store change information. This buffer is associated with the directory handle until it is closed and its size does not change during its lifetime. Directory changes that occur between calls to this function are added to the buffer and then returned with the next call. If the buffer overflows, the entire contents of the buffer are discarded and the lpBytesReturned parameter contains zero.



--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

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


 




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


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

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