C ++ ofstream динамические имена файлов и содержимого - PullRequest
0 голосов
/ 21 февраля 2019

Попытка написать динамическое имя файла и содержимое с использованием fstream со следующим:

ofstream file;
    file.open("./tmp/test.txt");
    //file.open("./tmp/%s.txt.txt", this->tinfo.first_name);    //nope file.open->FUBAR
    //file.open("./tmp/" + this->tinfo.first_name + ".txt");    //nope this->FUBAR
    //file.write( "%s\n", this->tinfo.first_name);              //nope this->FUBAR
    file << "%s\n", this->tinfo.first_name;                     //nope %s->FUBAR
    //Me->FUBU
    file << "test\n";
    file << "test\n";
    file.close();

Я был достаточно наивен, чтобы предположить, что соглашения printf (% d, this-> foo) будут работать, если нетдля фактического имени файла, а затем для содержимого.

Кажется, что ничего не работает, что мне не хватает?

на всякий случай, если что-то входит в мои:

#include "stdafx.h"
//#include <stdio.h>    //redundant, as "stdafx.h" already includes it
#include <stdlib.h>     /* srand, rand */
#include <time.h>       /* time */

#include <iostream>
#include <fstream> 
#include <string> 

Ответы [ 3 ]

0 голосов
/ 21 февраля 2019

Я не понимаю, почему вы захотите использовать синтаксис printf с fstream.Я бы просто предложил использовать ofstream так же, как вы используете cout.Пример: file << this->tinfo.first_name << '\n';

0 голосов
/ 21 февраля 2019

, если this->tinfo.first_name является std::string, вы можете добавить все в один string.

std::string temp = "./tmp/" + this->tinfo.first_name + ".txt";
file.open(temp);

Если нет, построите string с std::stringstream

std::ostringstream temp;
temp << "./tmp/" << this->tinfo.first_name << ".txt";
file.open(temp.str());

должен обрабатывать любой тип данных, с которым будет работать %s.

Документация для std :: ostringstream

Примечание: файл open, который может потреблятьstd::string был добавлен в C ++ 11.При компиляции по старому стандарту вам понадобится

file.open(temp.c_str());
0 голосов
/ 21 февраля 2019

Вам не нужно %s, в этом случае ofstream неявно поймет this->tinfo.first_name.Поэтому, пожалуйста, замените эту строку

file << "%s\n", this->tinfo.first_name;                     //nope %s->FUBAR

на

file << this->tinfo.first_name << "\n";                     //nope %s->FUBAR
...