Я пытаюсь открыть файл в подкаталоге «Файлы». Я знаю, как открыть файл в поддиректории, если я знаю имя:Как открыть файл в подкаталоге в 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;
}
Используйте 'strcat()' для объединения строк. – Barmar
Вы * делаете * знаете о, например. [ 'Snprintf'] (http://en.cppreference.com/w/c/io/fprintf)? –
Вы можете изменить каталоги с помощью 'chdir()'. – Barmar