我正在尝试打开目录,然后打开一个名为“ YouTubeSign”的文件,目录可以正常打开,但是由于某种原因,即使文件存在,文件上的fopen()也会失败;有什么想法吗?
int main(int argc, char **argv)
{
DIR *pdir = NULL;
struct dirent *in_file;
FILE *signature = NULL;
pdir = opendir(argv[1]);
if (pdir == NULL)
{
printf("could not open directory %s", argv[1]);
return -1;
}
while (in_file = readdir(pdir))
{
if (strcmp(in_file->d_name, "YouTubeSign") == 0)
{
signature = fopen(in_file->d_name, "r");
printf("opening youtubesign");
break;
}
}
if (signature == NULL){
printf("could not open file ");
return -1;
}
问题是,您从readdir
获得的文件名确实[[不是包括提供给opendir
的基本路径。
fopen()
时必须传递一个绝对的文件名,由目录名和文件库名组成,例如:char abs_path[PATH_MAX];
// ...
snprintf(abs_path, PATH_MAX, "%s/%s", argv[1], in_file->d_name);
signature = fopen(abs_path, "r");
技术上缺失。您需要确保该进程使用了正确的工作目录。