Как я могу удалить файл, на который указывает ФАЙЛ * в 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*
с именем
Вы закрыли указатель, затем ее значение было освобождено, как вы представляете себе удаление файла этим дескриптором?