Как я могу удалить файл, на который указывает ФАЙЛ * в C? - PullRequest
5 голосов
/ 07 сентября 2010
#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 ]

7 голосов
/ 07 сентября 2010

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

от мужчины:

ОПИСАНИЕ

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

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

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

7 голосов
/ 07 сентября 2010

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

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

1 голос
/ 07 сентября 2010

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

1 голос
/ 07 сентября 2010

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

1 голос
/ 07 сентября 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...