gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 19:42:13 31 4
gpt4 key购买 nike

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

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

但是,我正在尝试创建一个文件,该文件将打开子目录中的任何和所有文件,而无需提前知道文件名。我使用 readaddir() 函数来定位文件名,但是,我不确定如何将其插入 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");

关于c - c语言中如何打开子目录下的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32541079/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com