在“C”代码中,我想列出目录中的所有文件并删除最旧的文件。我怎么做?
我可以使用popen,或者我们有其他解决方案吗?
谢谢,
答案 0 :(得分:3)
从标签中,我假设你想在符合POSIX标准的系统中这样做。在这种情况下,用于列出文件夹中文件的代码片段如下所示:
#include <dirent.h>
#include <sys/types.h>
#include <stdio.h>
DIR* dp;
struct dirent* ep;
char* path = "/home/mydir";
dp = opendir(path);
if (dp != NULL)
{
printf("Dir content:\n");
while(ep = readdir(dp))
{
printf("%s\n", ep->d_name);
}
}
closedir(dp);
要检查文件创建或修改时间,请使用stat
(man 2 stat)。要删除文件,只需使用函数remove(const char* path)
答案 1 :(得分:2)
在Linux(实际上是任何POSIX系统)上,您通过调用opendir()
/ readdir()
/ closedir()
来阅读目录。然后,您可以在每个目录条目上调用stat()
以确定它是否是文件,以及它的访问/修改/状态更改时间。
如果您对“最旧”的定义取决于文件的创建时间,那么您就处于不稳定状态 - 传统上UNIX并未记录创建时间。在Linux上,一些最近的文件系统确实通过扩展属性file.crtime
(您使用getxattr()
中的sys/xattr.h
访问)来提供它,但是您必须处理该属性不存在的常见情况。不存在。
答案 2 :(得分:1)