Функция Fopen возвращает ноль, если дан существующий путь - PullRequest
0 голосов
/ 28 мая 2019

При попытке открыть файл с помощью fopen(path, "2"); я получаю NULL по существующему пути

iv'e пытался ввести только имя файла, и это работает, но я хочу, чтобы программа записала файл впуть ... Да, я пишу путь с двойной обратной косой чертой "\\", когда это необходимо.Да, путь без сомнения существует.

FILE* log;
char directory_path[PATH_LEN] = { 0 };
char directory_file[PATH_LEN] = { 0 };

//directory_path is the directory, entered by  the user
//LOG_NAME is the files name without the path - "log.txt"
//#define PATH_LEN 100

printf("Folder to scan:  ");
fgets(directory_path, PATH_LEN, stdin);
directory_path[strlen(directory_path) - 1] = 0;

//this section connects the path with the file name.
strcpy(directory_file, directory_path);
strcat(directory_file, "\\");
strcat(directory_file, LOG_NAME);

if ((log = fopen(directory_file, "w")) == NULL)
{
    printf("Error");
}

Моя программа работала, пока я не попытался записать в файл, чтобы создать файл журнала.Это означает, что путь, без сомнения, правильный.

Может кто-нибудь сказать мне проблему здесь?

1 Ответ

0 голосов
/ 29 мая 2019

У вас есть несколько проблем в вашем коде:

Для одного, fopen(path, "2"); недопустимо.Аргумент mode должен включать один из a, r и w и может дополнительно включать b или +.

В качестве другой вещи, directory_path[strlen(directory_path) - 1] = 0; может усекатьконец вашего пути (если его длина превышает PATH_LEN символов).

Возможна также проблема с переполнением буфера из-за того, что вы копируете строку в буфер того же размера, а затем объединяетедве другие строки к нему.Поэтому вам следует изменить эту строку:

char directory_file[PATH_LEN] = { 0 };

на эту:

char directory_file[PATH_LEN+sizeof(LOG_NAME)+1] = { 0 };

Чтобы устранить эту проблему, вы должны напечатать введенную строку и запросить подтверждение перед ее использованием (оберните этов #ifdef DEBUG).

...