在我的一项练习中,我必须通过 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");
}
}
最佳答案
该目录包含文件名。
因此第一个文件名可能是 foo
,这就是您将从 dirent 中得到的内容。然后你尝试打开它,有效地执行 fopen("foo", "r");
。
但这意味着“在当前工作目录中打开名为 foo
的文件”。由于该文件位于某个子目录中,因此无法找到它。
一种解决方案是每次开始处理新目录时cwd
到该目录。效果很好;挑战是完成后返回父目录。
关于c - 打开二进制文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37367666/