_finddata_t, _findfirst, _findnext for Mac OS-X

_finddata_t, _findfirst, _findnext for Mac OS-X

本文关键字:Mac OS-X for findfirst finddata findnext      更新时间:2023-10-16

我正在尝试使用CodeBlocks和GCC编译器在OS-X上编译一个程序:

    extern int listFiles(void) {
            struct _finddata_t myFile;
            int hFile;
            if ((hFile = _findfirst("*.txt", &myFile)) == -1L) {
                printf("No text files in current directory.n");
                return 0;
            }
            printf("File name: %s   File size: %d", myFile.name, myFile.size);
            while (_findnext(hFile, &myFile) == 0) {
                printf("File name: %s   File size: %d", myFile.name, myFile.size);
            }
            _findclose(hFile);
            return 1;
    }

但是,编译失败,出现以下错误:

error: variable has incomplete type 'struct _finddata_t'

我假设这是一个仅用于_findfirst and _findnext的windows结构。我可以使用什么等效的结构和函数来在OS-X上编译它?

正如Igor Tandetnik所评论的那样,您应该查看函数opendir()readdir(),closedir() *,类型DIR *struct dirent。这是一个基本的低级接口,它读取目录中的每个条目,在没有任何过滤的情况下,以不确定的顺序(实际上,通常是名称在原始目录中出现的顺序,但通常不是字母顺序或任何其他顺序)呈现名称。

如果您想过滤文件名,以便只选择.txt文件,那么您必须转到POSIX: scandir()中更晦涩的部分。这允许您提供一个选择器函数(一个回调),它告诉scandir()何时返回给定的条目,并且还接受一个比较器函数,用于对名称列表进行排序(就像通过qsort()一样)。


* 在搜索时,我还发现了fdopendir()dupfd()