Не удается выполнить запись в файл в программе на C

#c

#c

Вопрос:

Я пытаюсь записать свои результаты в выходной файл, запустив эту программу на C в терминале Mac. Я проверил, что все части программы работают путем записи непосредственно в терминал, но когда я пытаюсь записать в файл, ничего не происходит.

Строка «запись в файл» выполняет запись на каждой итерации, однако ничего не происходит с outputdata.txt файл.

Я изменил разрешения, и я могу записывать в этот файл непосредственно с терминала. Однако, это не работает с использованием приведенного ниже кода.

 #define OUTPUTFILE "outputdata.txt"

FILE *ofp;

char ofile_name[50] = OUTPUTFILE;

ofp = fopen(ofile_name, "r");

for (p = 1; p <= NumPattern ; p  ) {
    for (k = 1 ; k <= numnodes_out ; k  ) {
        fprintf(ofp, "%fn", output_nodes[p][k]);
        fprintf(stdout, "Writing to filen");
    }
}
fclose(ofp);
  

Ответ №1:

Вы открываете файл в режиме чтения, см.https://linux.die.net/man/3/fopen.

Если вы хотите выполнить запись в файл, вы должны открыть файл в режиме, поддерживающем запись, например: fopen(ofile_name, "w") .

Ваши основные параметры, если вы хотите выполнить запись только в файл, следующие:

  1. «w», который создаст файл, если он не существует, в противном случае он сократит файл до длины 0 (удалит все в файле) и позволит вам выполнять запись в него; или,
  2. «a», который будет добавлен в конец существующего файла.

Кроме того, если вы посмотрите на ссылку, упомянутую ранее, вы должны заметить, что функция может возвращать значение null, если файл не открывается успешно. Из-за этого вам следует проверить, не равен ли ФАЙЛ *, возвращаемый fopen, null, прежде чем работать с ним.

 #define OUTPUTFILE "outputdata.txt"

FILE *ofp;

char ofile_name[50] = OUTPUTFILE;

ofp = fopen(ofile_name, "r");

if (ofp) { // NOTE: added NULL check.
    for (p = 1; p <= NumPattern ; p  ) {
        for (k = 1 ; k <= numnodes_out ; k  ) {
            fprintf(ofp, "%fn", output_nodes[p][k]);
            fprintf(stdout, "Writing to filen");
        }
    }
    fclose(ofp);
}