在Linux上。
我想构建一个文件缓冲区。每30分钟保存一个新文件。但允许的文件总数为'n'。
因此,当创建'n + 1'文件时,必须删除最旧的文件。
我发现'dirent.h'和'struct stat'之类的东西可以帮助访问目录,列出所有文件并获取其属性。
struct stat不会给出创建时间,但只是 - 上次修改,上次访问,上次状态更改时间http://pubs.opengroup.org/onlinepubs/7908799/xsh/sysstat.h.html
请帮助。
P.S:现在无法提升。
答案 0 :(得分:3)
在Linux上,没有文件创建时间与文件系统元数据中的文件一起保存。有一些接近它,但不一样: inode修改时间(这是st_ctime
的{{1}}成员)。来自struct stat
手册页:
通过写入或设置inode来更改字段st_ctime 信息(即所有者,组群,链接数,模式等)。
只要,因为您不修改这些属性而stat
是你的“文件创建时间”。
答案 1 :(得分:1)
我需要一个删除给定目录中最旧文件的函数。我使用了系统回调函数并在C中编写了代码。您可以从C ++中调用它。
#include <stdio.h>
#include <dirent.h>
#include <string.h>
#include <sys/stat.h>
#include <stdlib.h>
#include <time.h>
#include <unistd.h>
void directoryManager(char *dir, int maxNumberOfFiles){
DIR *dp;
struct dirent *entry, *oldestFile;
struct stat statbuf;
int numberOfEntries=0;
time_t t_oldest;
double sec;
time(&t_oldest);
//printf("now:%s\n", ctime(&t_oldest));
if((dp = opendir(dir)) != NULL) {
chdir(dir);
while((entry = readdir(dp)) != NULL) {
lstat(entry->d_name, &statbuf);
if(strcmp(".",entry->d_name) == 0 || strcmp("..",entry->d_name) == 0)
continue;
printf("%s\t%s", entry->d_name, ctime(&statbuf.st_mtime));
numberOfEntries++;
if(difftime(statbuf.st_mtime, t_oldest) < 0){
t_oldest = statbuf.st_mtime;
oldestFile = entry;
}
}
}
//printf("\n\n\n%s", oldestFile->d_name);
if(numberOfEntries >= maxNumberOfFiles)
remove(oldestFile->d_name);
//printf("\noldest time:%s", ctime(&t_oldest));
closedir(dp);
}
int main(){
directoryManager("/home/myFile", 5);
}