在Windows上的c目录中获取每个文件

时间:2012-10-16 11:32:28

标签: c windows linux io readdir

我目前正在开发一个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不兼容。因此,在我的头文件中,我使用ifdef来包含dirent.h,如果在Linux上但不确定我可以在Windows上使用它。

感谢您提供的任何帮助。

3 个答案:

答案 0 :(得分:1)

要在Windows上列出文件,您可以使用FindFirstFile()FindNextFile()。有关示例,请参阅Listing the Files in a Directory

答案 1 :(得分:1)

答案 2 :(得分:0)

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

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