Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Проверить какие файлы добавились в каталог

23K
30 ноября 2006 года
Сорокалетний чайник
2 / / 30.11.2006
Такая простая задача: по нажатию кнопки узнать какие файлы добавились в заданный каталог с момента предыдущего нажатия. С теми файлами, которые добавились нужно что-то сделать (не скажу что, да это и не важно). Я находил примеры, которые постоянно мониторят содержимое папки и при ее изменении генерят событие (ну, как файл менеджер). Это мне не подходит. Конечно, можно хранить список ранее прочитанных файлов, а по нажатию кнопки запускать FindFirst- FindNext и сравнивать имена файлов с хранимыми. Но дело в том, что файлов очень много (тысячи) и они все добавляются и добавляются, и каждый раз гонять этот цикл - это медленно. Как реализовать это быстрее? Подскажите, если кто в курсе.
309
01 декабря 2006 года
el scorpio
1.1K / / 19.09.2006
А проверка на удаление/изменение не требуется?
Список TStringList имеет возможность сортировать содержимое.
А для проверки только добавления делаем просто:
Код:
TStringList *News = new TStringList(); // Спискок новых файлов
TStringList *Files = new TStringList(); // Список текущих файлов
Filed->Duplicates = dupError; // ошибка при дублировании строк
Files->Sort();
//... Далее создаём поиск по "*.*"  
int Index = 0;
AnsiString File_Name;
for (Цикл_Поиска)
{
    File_Name = ... ;// Имя найденного файла
// Поиск наличия строки в сортированном списке
    if (!Files->Find (File_Name, Index))
    {
    // Если не найдено
         News->Add (File_Name);
         Files->Add (File_Name);
    }
}

Сортированный список от обычного отличается следующими особенностями:
1. Можно использовать метод "Find", осуществляющий бинарного поиска. Index - номер элемента, результат (bool) - наличие элемента
2. Добавление элемента (Add) вставляет элемент в соответствующую позицию сортированного списка.

News - список новых файлов, может использоваться для вывода.
294
01 декабря 2006 года
Plisteron
982 / / 29.08.2003
Цитата: el scorpio


Как я понял, тормоза при ежесекундном чтении тысяч имён файлов из каталога. Есть функция, имени никак не припомню, позволяющая поставить обработчик события появления/удаления файла в данном каталоге. Думаю, она бы подошла. А список файлов можно хранить в каком-нибудь MemoryTable (что, имхо, лучше всего) или в скрытом от глаз пользователя ListView. Как функцию зовут, убей лопатой не помню. Может Green помнит?

294
01 декабря 2006 года
Plisteron
982 / / 29.08.2003
Цитата: Plisteron
Есть функция, имени никак не припомню, позволяющая поставить обработчик события появления/удаления файла в данном каталоге. Думаю, она бы подошла.Как функцию зовут, убей лопатой не помню.


Я знаю, сейчас вы будете плакать. Имя функции я вспомнил, дизассемблировав FAR. :D :D :D
А зовут её (точнее, их) FindFirstChangeNotification, FindNextChangeNotification и FindCloseChangeNotification!

http://msdn2.microsoft.com/en-gb/library/aa364417.aspx
http://msdn2.microsoft.com/en-us/library/aa914108.aspx
http://msdn2.microsoft.com/en-gb/library/aa364417.aspx
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/fileio/fs/findfirstchangenotification.asp
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/fileio/fs/obtaining_directory_change_notifications.asp

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог