_finddata_t, _findfirst, _findnext for Mac OS-X

Posted

技术标签:

【中文标题】_finddata_t, _findfirst, _findnext for Mac OS-X【英文标题】: 【发布时间】:2015-09-25 14:17:15 【问题描述】:

我正在尝试使用 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'

我假设这是一个仅限 Windows 的结构,用于_findfirst and _findnext我可以使用哪些等效的结构和函数在 OS-X 上编译它?

【问题讨论】:

如果我不得不猜测,我会看dirent 是的,opendirreaddir 【参考方案1】:

作为Igor Tandetnikcommented,你应该看看函数opendir()readdir(), closedir()*,以及 DIR *struct dirent 类型。这是读取目录中每个条目的基本低级接口,以不确定的顺序显示名称(实际上,通常是名称出现在原始目录中的顺序,但通常不是字母顺序或任何其他顺序) 没有任何过滤。

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


* 在搜索时,我还找到了fdopendir()dupfd()。它们相当新,而且很有趣。

【讨论】:

以上是关于_finddata_t, _findfirst, _findnext for Mac OS-X的主要内容,如果未能解决你的问题,请参考以下文章

JAVA07_Stream流中FindFirst方法查找元素第一个

JAVA07_Stream流中FindFirst方法查找元素第一个

JAVA07_Stream流中FindFirst方法查找元素第一个

Swift 3 - MagicalRecord:如何在空实体上使用 findFirst

学习记录(2022年3月份记录)

文件路径的保存且进行增删改查操作