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*?
您不能“转换” a struct dirent *,FILE *因为第一个只与一个目录条目相关,无论它是文件、子目录还是其他东西,无论您是否拥有该文件的访问权限等等,而您只能有一个FILE *你已经打开的文件。还。无法通过 inode 打开文件,
您可以做的是根据您在opendir()and 中使用的目录名称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;
}
Run Code Online (Sandbox Code Playgroud)
请注意,我假设,如果dirname不是绝对路径,则chdir()在调用opendir( dirname )和openfile( .... )