我正在尝试在名为" 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;
}
答案 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;);