尝试使用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>
答案 0 :(得分:1)
如果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
将使用的任何数据类型。
Documentation for std::ostringstream
注意:C ++ 11中添加了可以消耗open
的文件std::string
。如果要编译到较旧的标准,则需要
file.open(temp.c_str());
答案 1 :(得分:0)
在这种情况下,您不需要%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
答案 2 :(得分:0)
我不明白为什么要在fstream中使用printf语法。我只是建议您像使用ofstream
一样使用cout
。 E.X:
file << this->tinfo.first_name << '\n';