列出目录中的文件并在C / C ++中删除它们

时间:2011-11-10 05:48:22

标签: c linux

在“C”代码中,我想列出目录中的所有文件并删除最旧的文件。我怎么做?

我可以使用popen,或者我们有其他解决方案吗?

谢谢,

3 个答案:

答案 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)

您可以使用readdiropendir扫描目录 或者,如果要遍历(递归)文件层次结构ftsnftw。不要忘记忽略当前目录"."和父".."条目的条目。您可能也想使用stat系统调用。