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 获取名称和大小。
folder
是 opendir(".");
的 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
的源代码将提供很好的洞察力(尽管它可能对您的需要来说太复杂了)。
我的目标是尝试获取文件夹的名称、大小和最后修改时间。我已经使用 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 获取名称和大小。
folder
是 opendir(".");
的 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
的源代码将提供很好的洞察力(尽管它可能对您的需要来说太复杂了)。