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





Загляните в уведомления об изменении каталога.
inotify может быть вам
Хм. У меня создалось впечатление, что библиотеки портированы на разные платформы.
FileSystemWatcher должен сделать это за вас.
Как уже упоминалось ранее, уведомления об изменении каталога - это то, что вам нужно.
Я тоже изучил их, и заметил, что окна будут запускать уведомление, когда файл начинает записываться в папку. Если файл достаточно велик, вы получите уведомление до того, как запись в файл будет завершена.
Ознакомьтесь с этот поиск google для различных решений для ожидания, пока файл полностью не будет записан
Редактировать: Я только что увидел, что вопрос был помечен тегом C++, и связался с поиском .Net. Хотя то, что я предоставил, может быть неправильным языком, я думаю, что у вас все равно будут те же проблемы в Windows, независимо от того, в какой системе вы кодируете.
Уведомления об изменениях могут вызвать некоторые накладные расходы, если у вас NTFS, подумайте о Журнал изменений NTFS.
Вы можете использовать метод опроса для отслеживания папки. Например, цикл будет выполняться каждые 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
}
}
Это был лучший результат моего поиска в Google, поэтому я добавлю его в качестве ответа.
Если вы используете Qt, есть QFileSystemWatcher. Я не знал, что это существует, и мы использовали Qt, поэтому я потратил больше нескольких часов, используя FindFirstChangeNotification, чтобы переписать то, что было доступно мне, пока коллега не показал мне свет.
Тем не менее, хороший опыт обучения.
К сожалению, Inotify предназначен только для Linux.