gpt4 book ai didi

C 将 struct dirent * 转换为 FILE *

转载 作者:行者123 更新时间:2023-12-02 21:31:32 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) 之间不会执行任何 chdir() )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