我必须模拟in的ls
功能。unix
C
我必须创建一个程序来“按 C 类型获取任何目录下的所有文件”。
我用谷歌搜索并找到了获取文件列表的程序,但它们是按字母顺序排序的;我想按文件类型排序。请问,谁能帮帮我?
您必须将文件存储在内存中的某个位置。由于这看起来像一个学校项目,我建议将文件名加载到链表中,并使用其中一种算法对链表进行排序。这很可能是练习本身的目的。
让我们假设“扩展名”,即.MP3 类型为file type
“Fraunhofer MPEG Layer 3”,即使有人可能重命名了.WMA 文件并将其命名为.MP3。要检测“真实”文件类型,您需要使用一种称为“魔术文件”的东西,并且那里有一个 libmagic,但值得吗?(如果是博士论文或商业项目,答案是肯定的。如果项目由普通教授评分,那么你判断是否有被认为“太聪明”的风险)。
链表条目应该是struct
包含文件名和指向其扩展名的指针;通过考虑扩展名是“文件名中最后一个点之后的任何内容”,您可以找到最后一个,因此您可以利用该strrchr
功能。请记住,有些文件没有扩展名。
您判断是否使用节省内存的技巧,例如存储指向扩展名的指针,或使用strdup
. 前者更快更精简,但你必须记住第一个结构指针(文件名)必须被释放,而第二个绝对不能。有两个指针行为不同可能被认为是不好的编码实践(它是)或聪明的 hack(它是),这取决于您是否重视维护时间或速度/内存。
至于文件名本身的检索,并没有全可移植的方式,所以这就导致了 Boost 等库的开发。但是对于学校项目,也许您可以限制为 POSIX 系统并使用opendir
,readdir
和.closedir
stat
一个好的做法和明智的做法是将操作(目录检索、列表排序、列表显示)分离到不同的功能中,以便您可以单独和增量地测试它们(例如:文件夹检索确实检索所有内容,您可以以未排序的顺序显示文件等)。