如何在 C++ 中监视一个目录并读取该目录中的图像

Posted

技术标签:

【中文标题】如何在 C++ 中监视一个目录并读取该目录中的图像【英文标题】:How to monitor a directory and read image in this directory in C++ 【发布时间】:2015-04-22 21:01:26 【问题描述】:

首先,我是 C++ 新手。我正在使用 Visual Studio 2010。我参与了一个包含相机的项目。相机将图像(位图)发送到我计算机中的特定文件夹位置。我想一致地监视目录。当在目录中获得一个新的位图图像时,我想处理这个图像。我要使用的代码始终监视目录并读取此目录中的最后一个位图图像。我可以用什么来实现它?你有什么建议?能写出源代码吗?感谢您的关注。

【问题讨论】:

你能告诉我们你的尝试吗? 我正在使用以下代码处理图像: frame = cvLoadImage("test17.bmp",CV_LOAD_IMAGE_GRAYSCALE);然而;我不想通过输入图像名称来读取图像。我想监视一个目录,当一个图像被添加到目录时,我想读取这个图像。它是否有助于您理解我尝试做的事情? 我认为它可能与这个问题重复:***.com/questions/61253/… 和这个问题:***.com/questions/931093/… 【参考方案1】:

Windows ReadDirectoryChangesW API 可用于监视目录中添加的文件。但是,它非常先进,如果您不熟悉 C++ 和 Windows 编程,它可能超出您的能力范围。您将需要一些有经验的帮助。

【讨论】:

【参考方案2】:

我不同意回答问题的其他人的观点,可以使用我在下面使用的一些共存库轻松完成,此代码可以满足您的需求,

string processName()


   FILETIME bestDate =  0, 0 ;
   FILETIME curDate;
   string name;
   CFileFind finder;


   BOOL bWorking = finder.FindFile("*.png");

   while (bWorking)
   

      bWorking = finder.FindNextFile();

     // date = (((ULONGLONG) finder.GetCreationTime(ft).dwHighDateTime) << 32) + finder.GetCreationTime(ft).dwLowDateTime;

      finder.GetCreationTime(&curDate);

      if (CompareFileTime(&curDate, &bestDate) > 0 )
      
          bestDate = curDate;
          name = finder.GetFileName().GetString();
          // name = (LPCTSTR) finder.GetFileName();
      



   
   return name;

这里是我为你写的代码,它取最后输入的 /.png 扩展名的名称,你可以在 libray 中查看它。

请告诉我更多问题

【讨论】:

以上是关于如何在 C++ 中监视一个目录并读取该目录中的图像的主要内容,如果未能解决你的问题,请参考以下文章

从 OpenCV(C++)中的目录读取多个图像

如何在 Mac OS X 上监视目录中的更改?

如何从 ios webview 读取文档目录中的图像文件

如何使用Spark Structured Streaming连续监视目录

如何在 Linux 中监视完整的目录树的更改?

我可以在 C++ 中读取 Windows 中的文件而不锁定包含该文件的文件夹吗