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);

如果没有,构建 stringstd::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());