我正在用 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/