c - 打开二进制文件

标签 c fopen

在我的一项练习中,我必须通过 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/

相关文章:

c - 如何分割作为输入的字符串,我想像输出中那样用逗号分隔它

c - 指针用++递增

c++ - 您应该如何处理线程中的文件打开错误而不取消?

c - 串口的可变波特率可以吗?

c - 如何计算 --/++ 的值

c - libuv udp echo 服务器关于

c - 为什么我在读取 txt 文件时会出现笑脸字符?

PHP 无法在 fclose 后取消链接文件

c - 如何避免 C 文件名中的 "\"问题?

c - 为什么 Valgrind 提示 fgets?