gpt4 book ai didi

C 将 struct dirent * 转换为 FILE *

转载 作者:行者123 更新时间:2023-12-02 04:34:53 25 4
gpt4 key购买 nike

我正在用 C 编写一个文件浏览器,它使用 ls 和 cd 的等价物来让用户浏览文件系统并选择一个文件。一切正常 - 我可以让用户选择 struct dirent * 代表他们想要选择的文件的目录条目。但是,我想在我的程序中打开这个文件,我知道如何做到这一点的唯一方法是通过 fopen(FILE* fptr)。有什么方法可以将 struct dirent * 转换为 FILE*struct dirent 有一个属性 ino_t d_fileno,它指的是“文件序列号”——这与文件描述符相同吗?我可以使用该文件描述符打开 FILE* 吗?

最佳答案

你不能将 struct dirent * ‘转换’为 FILE * 因为第一个只与一个目录条目相关,无论它是文件还是子目录目录或其他东西,无论您是否有权访问该文件等等,而您只能拥有一个 FILE * 用于您打开的文件。还。无法通过 inode 打开文件,

可以做的是,根据您在opendir()dir->d_name 中使用的目录名称构建文件的路径名> 和 fopen() 该路径名:

 FILE *openfile( const char *dirname, struct dirent *dir, const char *mode )
{
char pathname[1024]; /* should alwys be big enough */
FILE *fp;

sprintf( pathname, "%s/%s", dirname, dir->d_name );
fp = fopen( pathname, mode );
return fp;
}

请注意,我假设如果 dirname 不是绝对路径,则在调用 opendir( dirname )openfile( .... )

关于C 将 struct dirent * 转换为 FILE *,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22202712/

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