Подтвердить что ты не робот

Как создать временный текстовый файл на С++?

Я пытаюсь создать временный текстовый файл на С++ и затем удалить его в конце программы. Мне не повезло с Google.

Не могли бы вы сказать, какие функции использовать?


Ниже приведены ответы на вопрос о том, как создать временный файл. Что, если я просто хочу создать файл (tmp.txt), а затем удалить его? Как мне это сделать?

4b9b3361

Ответ 1

Возможно, это поможет

FILE * tmpfile ( void );

http://www.cplusplus.com/reference/clibrary/cstdio/tmpfile/

Открыть временный файл

Создает временный двоичный файл, открывается для обновления (режим wb + - см. fopen for Детали). Имя файла гарантировано быть отличным от любого другого существующий файл. Временный файл автоматически создается, когда поток закрывается (fclose) или когда программа обычно заканчивается.

См. также

char * tmpnam ( char * str );

Создание временного имени файла

Строка, содержащая имя файла отличается от любого существующего файла генерироваться. Эта строка может использоваться для создать временный файл без перезапись любого другого существующего файла.

http://www.cplusplus.com/reference/clibrary/cstdio/tmpnam/

Ответ 2

Вот полный пример:

#include <unistd.h>

int main(void) {
  char filename[] = "/tmp/mytemp.XXXXXX"; // template for our file.        
  int fd = mkstemp(filename);    // Creates and opens a new temp file r/w.
                                 // Xs are replaced with a unique number.
  if (fd == -1) return 1;        // Check we managed to open the file.
  write(fd, "abc", 4);           // note 4 bytes total: abc terminating '\0'
  /* ...
     do whatever else you want.
     ... */
  close(fd);
  unlink(filename);              // Delete the temporary file.
}

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

tmpnam и tmpfile следует избегать, так как они могут пострадать от условий гонки. Подробнее см. man tmpfile(3).

Ответ 3

Это может быть немного не по теме, потому что автор хотел создать tmp.txt и удалить его после его использования, но это тривиально: вы можете просто открыть() его и удалить его (используя boost:: filesystem Конечно).

mkstemp() является основанной на UNIX. В Windows вы используете GetTempFileName() и GetTempPath() для генерации пути к временному файлу. Пример кода из MSDN:

http://msdn.microsoft.com/en-us/library/aa363875%28VS.85%29.aspx

Ответ 4

В Linux (начиная с ядра 3.11) существует флаг для открытия (2) O_TMPFILE, который создает временный файл, который не имеет имени (т.е. он не отображается в файловой системе). Это имеет несколько интересных особенностей:

  • Не стоит беспокоиться об уникальных именах, это просто индекс, нет имени.
  • Отсутствие условий гонки во время создания (например, атаки symlink).
  • Никаких бродячих файлов, если ваше приложение выходит из строя, оно всегда автоматически удаляется.

Ответ 5

Если вам нужен именованный файл (например, вы можете передать имя другому процессу, возможно, компилятору или редактору), затем зарегистрируйте функцию очистки, которая удаляет файл с помощью atexit(). Для создания файла можно использовать либо С++ <iostream>, либо C FILE * (<cstdio>). Не полностью стандартная, но широко доступная функция mkstemp() создает файл и сообщает его имя, а также возвращает дескриптор файла (третий механизм ввода-вывода); вы можете использовать функцию fdopen() для преобразования дескриптора файла в FILE *.

Если вам не нужен именованный файл, C-style FILE * в порядке, то посмотрите tmpfile(), как это было предложено @Tom.

Ответ 6

Интересно, почему большинство из вас, ребята, показали ему способ C сделать это вместо С++. Здесь fstream.
Попробуйте, чтобы удаление файла зависело от ОС, но вы можете использовать boost.filesystem, чтобы облегчить вам задачу.

Ответ 7

Хорошо, если вам удастся создать временный файл, вы можете использовать функцию remove для его удаления.

Функция объявлена ​​в stdio.h -

#include <stdio.h>

int remove(const char *pathname);

Например, если вы хотите удалить файл с именем myfile.txt, код будет

#include<stdio.h>

int main()
{
  if(remove("myfile.txt") == -1)
  {
    fprintf(stderr,"Remove failed");
    exit(EXIT_FAILURE);
  }
  exit(EXIT_SUCCESS);
}

Надеюсь, вы уже знаете, как создать временный файл, поэтому это должно решить ваш запрос. Надеюсь, что это поможет.