Как лучше всего отслеживать папку, чтобы увидеть, когда к ней добавлен файл изображения? Файлы добавляются примерно один раз в минуту, и именование происходит так: image0001.jpg, image0002.jpg, image0003.jpg и т.д. Мне нужно знать, когда файл был записан в папку, чтобы мое приложение могло получить доступ и использовать он.
Мониторинг папки для новых файлов в Windows
Ответ 1
Посмотрите уведомления об изменении каталога.
Ответ 2
Как упоминалось ранее, уведомления об изменении каталога - это то, что вы хотите.
Я просмотрел их также, и я заметил, что окна будут отключать уведомление, когда файл начнет записываться в папку. Если файл достаточно большой, вы получите уведомление до того, как файл закончит запись.
Отметьте этот поиск google для различных решений для ожидания, пока файл не будет полностью записан
Изменить. Я только что увидел, что вопрос был помечен С++, и я связан с поиском .Net. Хотя то, что я предоставил, может быть не правильным языком, я бы подумал, что у вас все еще будут проблемы с Windows, независимо от того, в какой системе вы кодируете.
Ответ 3
FileSystemWatcher должен быть в состоянии сделать это для вас.
Ответ 4
Изменение уведомлений может вызвать некоторые накладные расходы, если у вас есть NTFS, рассмотрите журналы изменений NTFS.
Ответ 5
- Synch.variant FindFirstChangeNotification
- Asynch.variant ReadDirectoryChangesW
Ответ 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 может быть вашей вещью