C++ ofstream 动态文件名和内容
C++ ofstream dynamic file names and content
正在尝试使用具有以下内容的 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>
您不需要 %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
我不明白您为什么要对 fstream 使用 printf 语法。我只是建议像使用 cout
一样使用 ofstream
。 E.X:
file << this->tinfo.first_name << '\n';
如果 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 中添加了可以使用 std::string
的文件 open
。如果编译为旧标准,您将需要
file.open(temp.c_str());
正在尝试使用具有以下内容的 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>
您不需要 %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
我不明白您为什么要对 fstream 使用 printf 语法。我只是建议像使用 cout
一样使用 ofstream
。 E.X:
file << this->tinfo.first_name << '\n';
如果 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 中添加了可以使用 std::string
的文件 open
。如果编译为旧标准,您将需要
file.open(temp.c_str());