C 将 struct dirent * 转换为 FILE *

sre*_*ond 2 c filesystems file-io dirent.h

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

Ing*_*rdt 6

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

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

 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;
 }
Run Code Online (Sandbox Code Playgroud)

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