使用 C 在 OS X 中上次修改文件后获取时间?
Getting time since file was last modified in OS X using C?
我有以下代码,假设打印自上次修改文件以来经过的时间:
int main(int argc, const char * argv[]) {
struct stat fileInfo;
char * dir = "/Users/jenna/Desktop/Random.rtf";
stat(dir, &fileInfo);
printf("Last modified time: %s\n", ctime(&fileInfo.st_mtime));
time_t mytime;
mytime = time(NULL);
printf("Current time: %s\n", ctime(&mytime));
double diff = difftime(ctime(&mytime), ctime(&fileInfo.st_mtime));
printf("diff : %f\n", diff);
}
不幸的是,这段代码给出了以下输出:
Last modified time: Wed Apr 6 00:15:30 2016
Current time: Wed Apr 6 00:17:29 2016
diff : 0.000000
当我将 printf 中的格式标志更改为 %d
时,我得到以下输出:
Last modified time: Wed Apr 6 00:15:30 2016
Current time: Wed Apr 6 00:18:34 2016
diff : 1983419808
两个输出都不正确,因为我预计只有几分钟的差异(以秒表示)。我在这里做错了什么?感谢您的帮助。
您应该练习启用编译器警告。这段代码应该会给你一些非常有用的代码。具体来说,您将 char*
值传递给 difftime
.
因为ctime
总是return指向同一个静态内存的指针,所以两次调用ctime
return同一个指针。现在您将这些隐式转换为 time_t
(编译器警告!!!),并且您得到的差异为零。
在第二种情况下,您将 double
传递给 printf
并告诉它您传递了一个 int
,这是未定义的行为。
你实际上想要的是像这样将time_t
值传递给difftime
:
double diff = difftime( mytime, fileInfo.st_mtime );
printf( "diff : %f\n", diff );
并养成阅读您不熟悉的函数的文档的习惯:
我有以下代码,假设打印自上次修改文件以来经过的时间:
int main(int argc, const char * argv[]) {
struct stat fileInfo;
char * dir = "/Users/jenna/Desktop/Random.rtf";
stat(dir, &fileInfo);
printf("Last modified time: %s\n", ctime(&fileInfo.st_mtime));
time_t mytime;
mytime = time(NULL);
printf("Current time: %s\n", ctime(&mytime));
double diff = difftime(ctime(&mytime), ctime(&fileInfo.st_mtime));
printf("diff : %f\n", diff);
}
不幸的是,这段代码给出了以下输出:
Last modified time: Wed Apr 6 00:15:30 2016
Current time: Wed Apr 6 00:17:29 2016
diff : 0.000000
当我将 printf 中的格式标志更改为 %d
时,我得到以下输出:
Last modified time: Wed Apr 6 00:15:30 2016
Current time: Wed Apr 6 00:18:34 2016
diff : 1983419808
两个输出都不正确,因为我预计只有几分钟的差异(以秒表示)。我在这里做错了什么?感谢您的帮助。
您应该练习启用编译器警告。这段代码应该会给你一些非常有用的代码。具体来说,您将 char*
值传递给 difftime
.
因为ctime
总是return指向同一个静态内存的指针,所以两次调用ctime
return同一个指针。现在您将这些隐式转换为 time_t
(编译器警告!!!),并且您得到的差异为零。
在第二种情况下,您将 double
传递给 printf
并告诉它您传递了一个 int
,这是未定义的行为。
你实际上想要的是像这样将time_t
值传递给difftime
:
double diff = difftime( mytime, fileInfo.st_mtime );
printf( "diff : %f\n", diff );
并养成阅读您不熟悉的函数的文档的习惯: