Я знаю, что это хорошая практика - закрывать каждый открываемый указатель файла, но я думал, что fclose () на самом деле что-то делает только тогда, когда кто-то работает с файлами в режиме записи / все, когда пользователю действительно нужно сохранить новый контент в файл.

Но действительно ли отсутствие fclose () каким-либо образом влияет на указатели только для чтения? Я провел некоторое тестирование, но не получил ничего отличного от того, когда использовал fclose ().

Что еще мне следует знать?

0
CARLOS EDUARDO NISHI 3 Май 2021 в 02:49

2 ответа

Лучший ответ

Указатели на открытые файлы могут протекать без fclose(), и они могут препятствовать открытию других файлов, когда вы выполняете файловые операции много раз.

Это тестовый код, который выполняет fopen() много раз.

#include <stdio.h>

int main(void) {
    int i;
    for (i = 0; i < 1000; i++) {
        FILE* fp = fopen("test.txt", "r");
        int data;
        printf("%3d : ", i);
        if (fp != NULL) {
            if (fscanf(fp, "%d", &data) == 1) {
                printf("data = %d\n", data);
            } else {
                puts("read failed");
            }
            fclose(fp);
        } else {
            puts("fopen failed");
        }
    }
    return 0;
}

Этот код успешно выполнил 1000 операций на Wandbox.

С другой стороны, когда я закомментировал строку fclose(fp);, операция стала терпеть неудачу после успешной 251 операции.

3
MikeCAT 2 Май 2021 в 23:54

При работе с файлами я открываю файл с помощью «w +», чтобы создать или перезаписать существующий файл. А затем, когда я хочу записать новую запись в файл, я снова открываю его с помощью "wa", пишу то, что вам нужно, используя fprintf, а затем закрываю его.

0
FlamingIce 3 Май 2021 в 00:01