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

Если вы посмотрите на то же самое, что называется перечисление , оно скажет, что нужно делать, если вы вставляете или обновляете строки:

  • Нет: автоматически сгенерированное значение не генерируется
  • Удостоверение: новое значение создается при вставке, но не изменяется при обновлении
  • Вычисляется: новое значение создается при вставке и обновлении

26
задан Bill the Lizard 17 September 2012 в 13:26
поделиться

6 ответов

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

FILE * tmpfile ( void );

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

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

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

См. также

char * tmpnam ( char * str );

Сгенерировать временное имя файла

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

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

23
ответ дан 28 November 2019 в 06:53
поделиться

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

#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) .

20
ответ дан 28 November 2019 в 06:53
поделиться

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

Если вам не нужен именованный файл, используйте ФАЙЛ в стиле C. * в порядке, затем посмотрите tmpfile () , как предлагает @Tom.

2
ответ дан 28 November 2019 в 06:53
поделиться

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

1
ответ дан 28 November 2019 в 06:53
поделиться

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

Функция объявлена ​​в 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);
}

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

0
ответ дан 28 November 2019 в 06:53
поделиться

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

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

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

6
ответ дан 28 November 2019 в 06:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: