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