gpt4 book ai didi

c - C语言打印文件大小和时间

转载 作者:行者123 更新时间:2023-11-30 15:16:05 24 4
gpt4 key购买 nike

我正在尝试打印文件的大小以及上次访问、上次修改和上次更改的时间。但我在终端中收到错误。它表示 buf.st_size 返回值的类型为 '__off_t',buf.st_atime、buf.st_mtime 和 buf.st_ctime 返回值的类型为 '__time_t'。

#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char** argv)
{

struct stat buf;

if(argc==2){
stat(argv[1],&buf);

if(S_ISDIR(buf.st_mode))
printf("It's a directoy.\n");

else if(S_ISREG(buf.st_mode))
printf("It's a file.\n");

else
printf("It's other.\n");

printf("User ID: %d.\nGroup ID: %d.\n",buf.st_uid,buf.st_gid);

printf("Size in bytes: %zd .\n",buf.st_size);

printf("Last access: %s.\nLast modification: %s.\nLast change: %d.\n",buf.st_atime,buf.st_mtime,buf.st_ctime);

exit(0);
}
printf("No argument was given.\n");
}

最佳答案

time_t只是一个整数,表示纪元 1970 年 1 月 1 日之后的秒数。在现代系统上,它是一个 64 位整数,根据您的系统,您应该能够使用 %lu 打印它。或%llu 。您还可以转换参数以匹配格式:

printf("Last access: %lu.\n", (long unsigned) buf.st_atime);

如果您想要字符串表示形式,可以使用 strftime 。此函数采用格式 – 使用 "%c"如果你很懒的话,可以使用“首选”格式 - 一个要填充的字符缓冲区和一个 struct tm ,其中包含分解为人类可读信息的时间和日期。

获取struct tm来自time_t时间戳,使用 localtime 。请务必包含 <time.h>对于这些功能。

例如:

char str[32];

strftime(str, sizeof(str), "%c", localtime(&buf.st_atime));
printf("Last access: %s.\n", str);

关于c - C语言打印文件大小和时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33233913/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com