我在检查修改日期时遇到问题。 fprintf在控制台中为文件夹中的每个相同编号等于零的文件打印。
while (1) {
source = opendir(argv[1]);
while ((file = readdir(source)) != NULL) {
if (file->d_type != DT_REG)
continue;
stat(file->d_name, &file_details);
fprintf(stderr, "Name: %s, Last modify: %ld \n", file->d_name, file_details.st_mtime);
}
closedir(source);
sleep(5);
}
答案 0 :(得分:0)
您必须构造目录条目的路径并将其传递到stat
。当前,您传递了条目名称,该名称仅在从当前目录枚举时才有效。
此外,您应该测试stat
的返回值以检测任何问题。这表明stat
无法使用当前代码。
这是修改后的版本:
#include <errno.h>
#include <stdio.h>
#include <unistd.h>
#include <string.h>
...
char path[1024];
while (1) {
source = opendir(argv[1]);
if (source == NULL)
break;
while ((file = readdir(source)) != NULL) {
if (file->d_type != DT_REG)
continue;
snprintf(path, sizeof path, "%s/%s", path, file->d_name);
if (!stat(path, &file_details))
fprintf(stderr, "Name: %s, Last modify: %ld\n", path, file_details.st_mtime);
else
fprintf(stderr, "Cannot stat %s; %s\n", path, strerror(errno));
}
closedir(source);
sleep(5);
}