Multithreading 在解析到根文件夹时,如何区分即将到来的是文件还是C语言中的文件夹?

Multithreading 在解析到根文件夹时,如何区分即将到来的是文件还是C语言中的文件夹?,multithreading,multiprocessing,Multithreading,Multiprocessing,我想通过用户在不同版本下使用多线程和多处理输入的根文件夹进行解析。但是,在通过根文件夹进行解析时,我如何区分下一个文件夹是文件夹还是文件?总结一下,我想了解如何区分下一个文件夹是文件还是文件夹。我想了解以下内容因为如果它是一个文件夹,那么我允许将此文件夹打开到一个动态线程和/或进程。如果它是一个文件,则现有线程或进程可以继续工作,而无需创建任何不同的线程和/或进程。我希望我可以表达我的问题。我正在等待您的答案。谢谢 您可以使用检查路径是否引用文件或目录,并检查返回结构上的st_mode字段(请参

我想通过用户在不同版本下使用多线程和多处理输入的根文件夹进行解析。但是,在通过根文件夹进行解析时,我如何区分下一个文件夹是文件夹还是文件?总结一下,我想了解如何区分下一个文件夹是文件还是文件夹。我想了解以下内容因为如果它是一个文件夹,那么我允许将此文件夹打开到一个动态线程和/或进程。如果它是一个文件,则现有线程或进程可以继续工作,而无需创建任何不同的线程和/或进程。我希望我可以表达我的问题。我正在等待您的答案。谢谢

您可以使用检查路径是否引用文件或目录,并检查返回结构上的
st_mode
字段(请参阅)

在Windows上,您可以使用获取文件属性,您可以检查文件属性是否为文件或目录


请注意,如果文件系统同时被另一个线程或进程更新,则无论您使用什么,都可能会受到竞争条件的约束,因为在您检查文件/目录之后和访问之前,文件/目录可能会被删除和/或更改。

以下是一些快速示例。您可以从多个根位置执行线程,递归调用这些根位置,并同步所有数据

在*尼克斯系统下

struct dirent *entry;
while ((entry = readdir("/root")) != NULL)
{
   if (entry->d_type == DT_DIR)
   {
      // do something
   }
}
closedir(dir);
在Windows下:

WIN32_FIND_DATA findData;
HANDLE hFind = FindFirstFile(("C:\\root" + "*.*").c_str(), &findData);
do
{
   if (findData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
   {
      // do something
   }

} while (FindNextFile(hFind, &findData));

FindClose(hFind);