在Windows上的c中获取目录中的每个文件
我目前正在一个C项目中工作,我需要扫描一个目录,并获取该目录中每个文件的文件名。代码需要同时在Windows和Linux上运行。我的linux版本使用以下代码在Windows上的c中获取目录中的每个文件,c,windows,linux,io,readdir,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
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
,但发现它与Windows不兼容。因此,在我的头文件中,我使用了一个ifdef在Linux上包含dirent.h if,但不确定在Windows上可以使用什么
谢谢你能提供的帮助 列出Windows上可使用和的文件。有关示例,请参见。MinGW()具有
dirent.h
。我还没有找到关于它在网络上具体实现dirent的文档,但我认为它与unix衍生版本非常相似。您可以查看头文件,然后决定是否使用它
关于其他答案的注释:我不知道softagalleria.net的版本,所以我不能谈论它,而是关于
FindFirstFile/FindNextFile
-API:如果您决定使用它,请确保使用“Unicode”版本(实际上是UCS-2),因为Ascii版本只允许非常有限的路径长度。要使用Unicode版本定义宏,并确保在所有路径前都加上\\?\
我想OP希望在这两个版本上都运行一些通用的东西:代码需要在Windows和Linux上运行
@mike,我不这么认为,给定问题的标题,并且问题中没有任何内容表明条件预处理器代码包含是不可接受的。