gpt4 book ai didi

c - 如何通过在C中键入获取目录下所有文件的列表

转载 作者:太空宇宙 更新时间:2023-11-04 04:00:37 24 4
gpt4 key购买 nike

我必须在C中模拟unixls函数。

我必须创建一个程序来“通过在 C 中键入获取任何目录下的所有文件”。

我用谷歌搜索并找到了获取文件列表的程序,但它们是按字母顺序排序的;我想按文件类型排序。拜托,任何人都可以帮助我吗?

最佳答案

必须将文件存储在内存中的某个位置。由于这看起来像一个学校项目,我建议将文件名加载到链表中,并使用一种算法对链表进行排序。这很可能就是练习本身的目的。

对于文件类型,我们假设“扩展名”,即 .MP3 的类型为“Fraunhofer MPEG Layer 3”,即使有人可能已重命名 .WMA 文件并将其称为 .MP3。要检测“真实”文件类型,您需要使用一种称为“魔术文件”的东西,并且那里有一个 libmagic,但它值得吗? (如果是博士论文或商业项目,答案是“当然是”。如果该项目由普通教授评分,那么您要判断是否冒着被认为“太聪明”的风险)。

链表条目应该是一个包含文件名和指向其扩展名的指针的struct;考虑到扩展名是“文件名中最后一个点之后的任何内容”,您可以找到最后一个,因此您可以利用 strrchr 函数。请记住,有些文件没有扩展名。

您判断是否采用节省内存的 hack,例如存储指向扩展的指针,或使用 strdup 复制扩展。前者更快更精简,但您必须记住必须释放第一个结构指针(文件名),而第二个绝对不能。两个指针的行为不同可能被认为是糟糕的编码实践(它是)或聪明的 hack(它是),具体取决于您是否重视维护时间或速度/内存。

至于文件名的检索本身,没有任何可移植的方式,所以这导致了诸如 Boost 之类的库的开发。但是对于学校项目,也许您可​​以限制为 POSIX 系统并使用 opendirreaddirclosedirstat .

一个好的做法和明智的做法是将不同功能中的操作(目录检索、列表排序、列表显示)分开,这样您就可以分别和增量地测试它们(例如:文件夹检索确实检索所有内容并且您可以按未排序的顺序显示文件等)。

关于c - 如何通过在C中键入获取目录下所有文件的列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12103733/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com