繁体   English   中英

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

[英]How to Get list of all file under the directory by type in C

我必须在C模拟unixls函数。

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

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

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

对于file type我们假设“扩展名”,即即使某人可能已重命名.WMA文件并将其命名为.MP3,.MP3的类型也是“ Fraunhofer MPEG Layer 3”。 要检测“ true”文件类型,您需要使用一种称为“ magic file”的文件,并且那里有一个libmagic,但这值得吗? (如果是博士学位论文或商业课程,答案为“是”。如果该课程由您的普通教授评分,则您可以判断是否有被认为“太聪明”的风险)。

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

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

至于文件名本身的检索,没有万能的方法,因此导致了Boost等库的开发。 但是对于学校项目,也许您可​​以限制为POSIX系统,并使用opendirreaddirclosedirstat

一个好的做法和明智的选择是将不同功能中的操作(目录检索,列表排序,列表显示)分开,以便您可以分别和渐进地对其进行测试(例如:文件夹检索确实可以检索所有内容,并且可以以未排序的顺序显示文件等)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM