Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Windows上的c中获取目录中的每个文件_C_Windows_Linux_Io_Readdir - Fatal编程技术网

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

在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

我目前正在一个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
,但发现它与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,我不这么认为,给定问题的标题,并且问题中没有任何内容表明条件预处理器代码包含是不可接受的。