我正在编写一个程序,该程序应该搜索用户提供的目录,以便查找在给定时间内一天内访问,修改或更改的所述目录中的所有文件。我有两个明确的问题,也许还有另一个问题。全球用户提供的目录?
第一个问题是我只能让程序做浅度搜索,它不会查看任何子目录。我确定它与我连接到目录缓冲区的内容有关(现在它是。)。第二个问题是,它没有搜索每个文件,尽管它看起来大部分都是 - 我认为这可以回到问题1。第三个“问题”是,当我检查每个文件的访问时间时,似乎它们都是一样的(尽管我没有改变/修改时间的这个问题)。我通过VM在Ubuntu上运行,如果这可能影响访问时间。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/stat.h>
#include <glob.h>
/* Function that checks if specified file was accessed, modified, or
changed within a day of the specified time. */
void checkFile(long long time, char * fileName) {
struct stat *s;
time_t accessTime;
time_t modTime;
time_t changeTime;
s = malloc(sizeof(struct stat));
if(stat(fileName,s) == 0) {
accessTime = s->st_atime;
modTime = s->st_mtime;
changeTime = s->st_ctime;
if((time - accessTime) <= 86400 && (time - accessTime) >= -86400)
printf("%s\n",fileName);
else if((time - modTime) <= 86400 && (time - modTime) >= -86400)
printf("%s\n",fileName);
else if((time - changeTime) <= 86400 && (time - changeTime) >= -86400)
printf("%s\n",fileName);
}
free(s);
}
void searchDirectory(long long time, glob_t globbuf) {
if(globbuf.gl_pathc == 0)
printf("there were no matching files");
else {
int i;
for(i = 0; i < globbuf.gl_pathc; i++)
checkFile(time,globbuf.gl_pathv[i]);
}
}
int main(int argc, char** argv) {
long long time = atol(argv[1]);
char * buf = argv[2];
strcat(buf,"*.*");
glob_t globbuf;
glob(buf, 0, NULL, &globbuf);
searchDirectory(time,globbuf);
globfree(&globbuf);
return 0;
}
谢谢你的时间!
非常感谢您提供这样丰富的答案! – 2011-05-07 06:34:06