在我的一个练习中,由于C,我必须打开一个文件夹。我使用dirent库执行此操作,之后我成功向屏幕显示文件夹中每个文件的名称。但现在,我想每次打开已经打印到屏幕的当前文件。所以我用fopen做这个,但每次我的fopen返回NULL我能做什么才能每次打开当前文件。 谢谢你!
这是我的代码:
void OpenDirectory(char *Folder, char *Virus){
DIR * dir = NULL;
struct dirent* CurrentFile = NULL;
dir = opendir(Folder);
if (dir == NULL){
perror("");
}
else
{
while ((CurrentFile = readdir(dir))!= NULL)
{
if (!strcmp(CurrentFile->d_name, ".") || !strcmp(CurrentFile->d_name, ".."))
{
// Don't do anything
}
else
{
printf("Current file is : %s\n", CurrentFile->d_name);
Myfile(CurrentFile->d_name);
}
}
}
}
void Myfile(FILE* File1){
File1 = fopen(File1, "rb");
printf("File is : %s", File1);
if (File1 == NULL)
{
printf("The file source doesn't exist !\n");
}
else
{
printf("Welcome");
}
}
答案 0 :(得分:1)
该目录包含文件名。
所以第一个文件名可能是foo
,那就是你将从dirent中得到什么。那么你试着打开它,有效地做fopen("foo", "r");
。
但这意味着"在当前工作目录中打开名为foo
的文件"。由于该文件位于某个子目录中,因此无法找到它。
每次开始处理新目录时,一个解决方案是cwd
到目录。这很好;完成后,挑战是返回父目录。