我正在尝试打开一个目录,然后打开一个名为“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;
}
答案 0 :(得分:4)
问题是,您从readdir
获取的文件名不包含提供给opendir
的基本路径。
您必须使用基本路径,路径分隔符和文件名创建完整路径。
答案 1 :(得分:0)
使用由目录名和文件基名组成的fopen()
时,必须传递绝对文件名,例如:
char abs_path[PATH_MAX];
// ...
snprintf(abs_path, PATH_MAX, "%s/%s", argv[1], in_file->d_name);
signature = fopen(abs_path, "r");
答案 2 :(得分:-1)
问题是,当您测试此代码时,它将在命令行中运行。这里没有技术。您需要确保该进程使用正确的工作目录。