2

我目前正在处理一个 C 项目,我需要扫描一个目录并获取该目录中每个文件的文件名。代码需要在 Windows 和 Linux 上运行。我有使用以下代码的 linux 版本。

DIR *dp;
int i = 0;
struct dirent *ep;
char logPath[FILE_PATH_BUF_LEN];
sprintf(logPath, "%s/logs/", logRotateConfiguration->logFileDir);
printf("Checking pre existing log count in: %s\n", logPath);
dp = opendir(logPath);

if (dp != NULL)
{
    while ((ep = readdir(dp)) != NULL)
    {
        if (strcmp(ep->d_name, ".") != 0 && strcmp(ep->d_name, "..") != 0)
        {
            i = i + 1;
        }
    }
    closedir(dp);
}
else
{
    perror("Couldn't open directory");
}
logRotateConfiguration->logCount = i;

为了使此代码正常工作,我正在使用,#include <dirent.h>但发现它与 Windows 不兼容。因此,在我的头文件中,我在 Linux 上使用了 ifdef 来包含 dirent.h,但不确定在 Windows 上可以使用什么。

感谢您的任何帮助,您可以提供。

4

3 回答 3

1

要在 Windows 上列出文件,您可以使用FindFirstFile()FindNextFile(). 有关示例,请参阅列出目录中的文件

于 2012-10-16T11:35:33.250 回答
1

dirent.h (clicky) 有一个免费的 windows 实现

于 2012-10-16T11:36:43.377 回答
0

MinGW(链接)有dirent.h。我在网上没有找到关于它具体实现 dirent 的文档,但我认为它与 unix-derivatives 版本足够相似。您可以查看头文件,然后决定是否使用它。

关于其他答案的注释:我不知道来自 softagalleria.net 的版本,所以我不能谈论它,但关于FindFirstFile/FindNextFile-API:如果您决定使用它,请确保使用“Unicode”-Versions(实际上是 UCS- 2) 因为 Ascii 版本只允许非常有限的路径长度。要使用 Unicode 版本,请定义宏并确保在所有路径前加上\\?\.

于 2012-10-16T12:02:18.307 回答