나는 파일 시스템을 탐색하고 파일을 선택할 수 있도록 ls와 cd에 해당하는 것을 사용하는 C에 파일 브라우저를 작성하고 있습니다. 모두 잘 작동합니다. 사용자가 선택한 파일의 디렉토리 항목을 나타내는 struct dirent *
을 선택하는 한 얻을 수 있습니다. 그러나 내 프로그램에서이 파일을 열고 싶습니다. 그 방법을 알고있는 유일한 방법은 fopen(FILE* fptr)
입니다. struct dirent *
을 FILE*
으로 변환 할 수있는 방법이 있습니까? struct dirent
에는 "파일 일련 번호"를 나타내는 ino_t d_fileno
속성이 있습니다. 이는 파일 설명자와 동일합니까? 해당 파일 설명자를 사용하여 FILE*
을 열 수 있습니까?C struct dirent *를 FILE로 변환합니다. *
1
A
답변
3
당신은 할 수 없습니다 '변환'첫 번째는 하나 명의 디렉토리 엔트리는 파일에 대한 액세스 권한이 있는지 여부는 파일, 서브 디렉토리 또는 뭔가 다른, 아무리 있는지에 상관없이 관련이 있기 때문에 FILE *
에 struct dirent *
및 그래서 당신은 열어 놓은 파일에 대해서만 FILE *
을 가질 수 있습니다. 또한. 이 아이 노드가 있어요하여 파일을 열 수있는 방법은 없다 당신이 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(....)
0
struct dirent *
을 FILE *
으로 변환하면 안됩니다. struct dirent
에 해당하는 파일 이름을 원하면이 구조에서 가져올 수 있습니다. 예를 들어
, 당신은
struct dirent *dp = readdir(...);
이있는 경우는이 디렉토리 엔트리의 파일 이름은 dp->dname
입니다.
자세한 내용은 readdir(3)
을 참조하십시오.
당신이 dp-> d_name 의미합니까 호출 사이의
chdir()
들하지 않는다, 나는 가정 있습니다? – sredmond@sredmond 죄송합니다. 당신 말이 맞아요. –