如何在多个操作系统下获取c中的文件修改时间?

我正在尝试用c编写一个便携式函数,比较2个文件的最后修改时间。 文件很小并且一个接一个地写入,因此我需要比1秒(毫秒)更精细的粒度。
似乎有太多的时间/日期function……

C标准没有任何function,但Posix规范确实如此。 2008版甚至提供亚秒级时间戳。 #define _POSIX_C_SOURCE 200809L

以下代码应该让您了解如何使用它。

#define _POSIX_C_SOURCE 200809L #include  #include  #include  #include  // for printf #include  // for EXIT_FAILURE int main(int argc, char **argv) { for (int i = 1; i < argc; ++i) { struct stat st = {0}; int ret = lstat(argv[i], &st); if (ret == -1) { perror("lstat"); return EXIT_FAILURE; } printf("%s: mtime sec=%lld nsec=%lld\n", argv[i], (long long) st.st_mtim.tv_sec, (long long) st.st_mtim.tv_nsec); } return 0; } 

你应该看看stat()函数。 它可以在* nix和windows上使用 。

它们都会返回一个包含字段名称st_msize的结构。 它们是我听过的最好的function,以便从操作系统获取此类信息。

由于您需要可移植性,请注意处理Windows上可用的各种不同类型。 在* NIX上,它是一个经典的time_t结构。 如果您包含特定呼叫,则可以获得nano秒mtime:根据手册页,它在POSIX.1-2008中定义。

您还可以查看如何处理64/32位time_t

对于POSIX UNIX, stat()是可移植的,并提供struct stat st_mtime ,这是epoch秒的修改时间。 Windows stat返回窗口时间值,并且具有创建时间而不是st_ctime 。 对于非POSIX UNIX实现,Windows和其他操作系统,没有文件修改时间的可移植概念。 因此,根据您对便携式设备的想法,这整个概念可能或我不适合您。