我目前正在开发一个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上使用它。
感谢您提供的任何帮助。
答案 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版本定义宏,请确保使用\\?\
前缀所有路径。