3

我正在开发一个 C 项目,我需要在其中获取目录中的文件列表。我正在使用 dirent.h,但在让它工作时遇到了一些问题,我正在 Linux 下构建程序。

当我尝试构建程序时,出现以下错误

myClass:error: âDIRâ undeclared (first use in this function)
myClass:408: error: (Each undeclared identifier is reported only once
myClass:408: error: for each function it appears in.)
myClass:408: error: âdirâ undeclared (first use in this function)
myClass:410: warning: implicit declaration of function âopendirâ
myClass:413: warning: implicit declaration of function âreaddirâ
myClass:413: warning: assignment makes pointer from integer without a cast
myClass:415: error: dereferencing pointer to incomplete type
myClass:417: warning: implicit declaration of function âclosedirâ

下面是我正在使用的代码

int logMaintenance(void *arg)
{
    DIR *dir;
    struct dirent *ent;
    dir = opendir(directory);
    if (dir != NULL)
    {
        while ((ent = readdir (dir)) != NULL)
        {
            printf("%s\n", ent->d_name);
        }
        closedir(dir);
    }
    else
    {
        printf("Failed to read directory %i", EXIT_FAILURE);
    }
    return 0;
}

我不明白这些错误是什么意思,特别是当它说 DIR 在我包含 Liunux 的 dirent.h 头文件时未声明时。

谢谢你的帮助。

4

2 回答 2

3

您应该确保:

  • #include <dirent.h>,而不是"dirent.h",以便使用系统搜索头文件的路径来定位该文件。
  • dirent.h的项目中的某个地方没有可以取而代之的文件。

当尝试调试这种奇怪的问题时,请向 GCC 询问预处理后的输出gcc -E。您可以查看它包含哪些文件(包括路径)。这可以有很大帮助。

如果您使用的是 Microsoft Visual Studio,请转到以下问题:
Microsoft Visual Studio:opendir() 和 readdir(),如何?

于 2012-04-30T15:59:24.690 回答
0

我不确定,但似乎总是有人告诉我你总是需要一个 main 函数......但是我只有 8 个月(2 个学期)的 C++ 学习。我只是为了安全而练习它,但是,我也会使用:

int main(int argc, char **argv)或者 int main(int argc, char *argv[])而不是 int logMaintenance(void *arg)

(使用dirent.h时)。

于 2012-12-02T19:18:46.093 回答