如何在c中的子目录中打开文件

时间:2015-09-12 16:26:29

标签: c file-io

我正在尝试在名为" Files"的子目录中打开一个文件。如果我知道名称,我知道如何在子目录中打开文件:

 fopen("./Files/file.txt", "r");

但是,我正在尝试创建一个文件,该文件将打开子目录中的所有文件,而不必提前知道文件名。我使用reaaddir()函数来找到文件名,但是,我不知道如何将其插入fopen来打开并读取文件。 readdir()函数自动将文件名保存在dp_> d_name中。如果我这样做:

fopen("./Files/dp->d_name", "r");

该程序将尝试打开名为" dp-> d_name"的文件。而不是存储在该位置的文件名。

如果没有办法做到这一点,有没有办法从程序中更改当前的工作目录?我要打开的每个文件都在同一个子目录中,因此这是一个可接受的解决方案。

这是我的代码,供参考:

#include <stdio.h>
#include <dirent.h>
#include <string.h>

void  readFile(int)
{
        DIR *dir;
        struct dirent *dp;
        char * file_name;
        char buffer[100];
        FILE *out;
        FILE *in;
        char outName[] = "filenames.txt";

        if (( out = fopen(outName, "w+")) == NULL )
        {
                printf("Can't open %s for writing.\n", outName);
                return 2;
        }

        dir = opendir("./Files/");
        while ((dp=readdir(dir)) != NULL)
        {
                if ( !strcmp(dp->d_name, ".") || !strcmp(dp->d_name, ".."))
                {
                    //do nothing...
                }
                else
                {
                        if (( in = fopen( dp->d_name, "r")) == NULL)
                        {
                                printf("Can't open %s for writing.\n", dp->d_name);
                                return 2;
                        }

                         fgets(buffer, 100, in);
                         printf("\"%s\"\n", buffer);
                }
        }
        closedir(dir);
        fclose(out);
        return 0;
}

1 个答案:

答案 0 :(得分:0)

您可以通过加入&#34; ./ Files /&#34;在另一个变量中创建完整的文件位置。在dp-&gt; d_name之前。您可以使用strcat()或使用足够大小的create char *来存储整个位置,然后使用for循环填充它,然后在fopen中使用此变量。例如。 如果dp-> d_name =&#34; f1.txt&#34;然后创建一个变量, newFileName =&#34; ./ Files / f1.txt&#34;然后fopen(newFileName,&#34; r&#34;);