Мониторинг папки для новых файлов в Windows

Как лучше всего отслеживать папку, чтобы увидеть, когда к ней добавлен файл изображения? Файлы добавляются примерно один раз в минуту, и именование происходит так: image0001.jpg, image0002.jpg, image0003.jpg и т.д. Мне нужно знать, когда файл был записан в папку, чтобы мое приложение могло получить доступ и использовать он.

Ответ 2

Как упоминалось ранее, уведомления об изменении каталога - это то, что вы хотите.

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

Отметьте этот поиск google для различных решений для ожидания, пока файл не будет полностью записан

Изменить. Я только что увидел, что вопрос был помечен С++, и я связан с поиском .Net. Хотя то, что я предоставил, может быть не правильным языком, я бы подумал, что у вас все еще будут проблемы с Windows, независимо от того, в какой системе вы кодируете.

Ответ 3

FileSystemWatcher должен быть в состоянии сделать это для вас.

Ответ 4

Изменение уведомлений может вызвать некоторые накладные расходы, если у вас есть NTFS, рассмотрите журналы изменений NTFS.

Ответ 6

Вы можете использовать метод опроса для наблюдения за папкой. Например, цикл будет выполняться каждые 5 секунд.

Этот метод возвращает список новых файлов:

List<string> files = new List<string>();
string path = @"C:\test\"; // whatever the path is

public List<string> GetNewFiles(string path)
    {
        // store all the filenames (only .jpg files) in a list
        List<string> currentFiles = System.IO.Directory.GetFiles(path, "*.jpg");

        if ( currentFiles.Count() > files.Count() )
        {
            count = newFiles.Length - files.Length;
            List<string> newFiles = new List<string>();

            foreach ( string file in currentFiles )
            {
                if ( !files.Contains(file) )
                {
                    newFiles.Add(file);
                }
             }
         }
         files = currentFiles;
         return newFiles;
    }

Это метод, который будет проводить опрос каждые 5 секунд и вызывать предыдущий метод.

public void MonitorFolder()
{
    while (true)
    {
        List<string> newFiles = GetNewFiles(path);
        System.Threading.Thread.Sleep(5000); // 5000 milliseconds
    }
}

Ответ 7

inotify может быть вашей вещью