繁体   English   中英

c语言如何打开子目录下的文件

[英]How to open a file in a subdirectory in c

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

 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;
}

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM