C程序文件夹中文件的最后修改

Last Modified of a File in Folder of C Program

我的目标是尝试获取文件夹的名称、大小和最后修改时间。我已经使用 dirent.h 来获得前两种类型。我不知道获取最后修改值的最佳方式是什么,但我目前使用的方式似乎不是很有用。尝试将我的路径作为我打开的 dirent 文件夹时出现类型错误。我不确定是否有更简单的方法来执行此操作,或者任何指导将不胜感激。我在 Whosebug 上找到了一个如何获取最后修改的示例,并试图使用它……下面是我的代码:



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

void getFileCreationTime(char *path) {
    struct stat attr;
    stat(path, &attr);
    printf("Last modified time: %s", ctime(&attr.st_mtime));
}

int main()
{
    DIR *folder;
    struct dirent *entry;
    int files = 0;

    folder = opendir(".");
    if(folder == NULL)
    {
        perror("Unable to read directory");
        return(1);
    }

    while( (entry=readdir(folder)) )
    {
        files++;
        printf("File %3d: %s\n",files, entry->d_name);
        printf("File %3d: %i\n",files, entry->d_reclen);
        getFileCreationTime(folder);
    }

    closedir(folder);

    return(0);
}

有错误:

main.cpp: In function ‘int main()’:
main.cpp:36:35: error: cannot convert ‘DIR* {aka __dirstream*}’ to ‘char*’ for argument ‘1’ to ‘void getFileCreationTime(char*)’
         getFileCreationTime(folder);

同样,我试图获取每个文件夹的最后修改日期,我正在使用 dirent 获取名称和大小。

folderopendir("."); 的 return 值。 opendir return 是 DIR* 结构或 NULL。 不是用字符表示的目录路径。

当您调用 getFileCreationTime(folder); 时,您正在向您的函数发送一个 DIR*。但是你期待 char* path。所以不要传递 DIR*,传递代表你的目录的字符。在您的情况下 "."(如上面的 opendir() 语句中所用)。

显然,您的目录名称可以存储在变量中。

[...]

while( (entry=readdir(folder)) )
{
    files++;
    printf("File %3d: %s\n",files, entry->d_name);
    printf("File %3d: %i\n",files, entry->d_reclen);
    getFileCreationTime(".");
}

[...]

使用它,您将能够读取时间值。你已有的名字。

对于目录大小,您必须遍历目录对象并添加它们的大小。您将必须决定如何处理子目录。递归下去还是只取本地对象? du 的源代码将提供很好的洞察力(尽管它可能对您的需要来说太复杂了)。