Как я могу удалить файл, на который указывает ФАЙЛ * в C?

#include<stdio.h>

int main() {

    FILE* fp;
    fp = fopen("temp.txt", "w");
    fprintf(fp, "Hello, World!\n");

    // remove("temp.txt");  this requires the filename as an argument
    // removefile(fp);      <--- is something like this possible?

    return 0;
}

Функция удаления ( определенная в stdio.h) принимает имя файла в качестве параметра, но не сам указатель файла.

Есть ли какая-то функция в стандартных библиотеках C, которая выполняет удаление файла и принимает в качестве аргумента указатель файла?

5 ответов

Вы можете использовать функцию 'FILE * tmpfile(void)' из stdlib.

от мужчины:

ОПИСАНИЕ

Функция tmpfile () должна создать временный файл и открыть соответствующий поток. Файл должен быть автоматически удален, когда все ссылки на файл закрыты. Файл открывается как в fopen () для обновления (w+).

В некоторых реализациях постоянный файл может быть оставлен позади, если процесс, вызывающий tmpfile (), будет уничтожен во время обработки вызова tmpfile ().

Сообщение об ошибке может быть записано в стандартную ошибку, если поток не может быть открыт.

Я не верю, что есть какой-либо способ сделать это, потому что ФАЙЛ * может не обязательно соответствовать файлу в файловой системе (например, stdin и stdout).

А в файловых системах, которые поддерживают жесткие ссылки, может быть несколько путей, ссылающихся на один и тот же базовый файл, какой из них вы хотите удалить?

Нет, нет (к сожалению).

Нет, ты не можешь. А также FILE Структура не включает в себя имя файла внутри него. Поэтому лучше всего иметь структуру, которая будет содержать указатель на FILE и к char* с именем

Вы закрыли указатель, затем ее значение было освобождено, как вы представляете себе удаление файла этим дескриптором?

Другие вопросы по тегам