[英]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.