我想通过在不同版本中使用多线程和多处理由用户输入的根文件夹进行解析。但是,当我通过根文件夹解析下一个是文件夹还是文件时,如何区分? ?总结一下,我想学习如何区分即将发布的文件或文件夹。我想学习这个,因为如果它是一个文件夹,那么我让这个文件夹打开一个动态线程和/或进程。如果它是一个文件现有的线程或进程可以继续工作,没有任何必要性来创建任何不同的线程和/或进程。我希望我能表达我的问题。我在等你的答案。谢谢。
答案 0 :(得分:0)
您可以使用stat()
function检查路径是否引用文件或目录,并检查返回结构上的st_mode
字段(请参阅http://pubs.opengroup.org/onlinepubs/009695399/basedefs/sys/stat.h.html)。
在Windows上,您可以使用GetFileAttributesEx
获取文件属性,您可以检查它是否为文件或目录。
请注意,如果文件系统由另一个线程或进程同时更新,则无论您使用的是什么,都可能会受到竞争条件的影响,因为文件/目录可能会在您检查后和之后删除和/或更改你可以访问它。
答案 1 :(得分:0)
以下是一些快速示例。您可以从多个根位置进行线程化,递归调用这些位置,并同步所有数据。
在* nix系统下;
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);