我正在尝试用C++编写一个程序,该程序创建一些文件(.txt)并将结果写入其中。问题是这些文件的数量在开始时不固定,只在程序接近结束时出现。我想将这些文件命名为“file_1.txt”、“file_2.txt”、...、“file_n.txt”,其中n是整数。我不能使用连接,因为文件名要求类型“const char*",我没有找到任何方法将“string”转换为这种类型。我还没有在网上找到任何答案,如果你能帮助我,我将非常高兴。
prdp8dxp1#
可以使用c_str成员函数从std::string获取const char*。
c_str
std::string
const char*
std::string s = ...; const char* c = s.c_str();
如果你不想使用std::string(也许你不想分配内存),那么你可以使用snprintf来创建一个格式化字符串:
snprintf
#include <cstdio> ... char buffer[16]; // make sure it's big enough snprintf(buffer, sizeof(buffer), "file_%d.txt", n);
n这里是文件名中的数字。
n
7jmck4yq2#
for(int i=0; i!=n; ++i) { //create name std::string name="file_" + std::to_string(i) + ".txt"; // C++11 for std::to_string //create file std::ofstream file(name); //if not C++11 then std::ostream file(name.c_str()); //then do with file }
dnph8jn43#
...创建文件名的另一种方法
#include <sstream> int n = 3; std::ostringstream os; os << "file_" << n << ".txt"; std::string s = os.str();
flvlnr444#
样本代码:
#include <iostream> #include <fstream> #include <string> #include <sstream> using namespace std; string IntToStr(int n) { stringstream result; result << n; return result.str(); } int main () { ofstream outFile; int Number_of_files=20; string filename; for (int i=0;i<Number_of_files;i++) { filename="file_" + IntToStr(i) +".txt"; cout<< filename << " \n"; outFile.open(filename.c_str()); outFile << filename<<" : Writing this to a file.\n"; outFile.close(); } return 0; }
yk9xbfzb5#
我使用下面的代码来实现这一点,您可能会发现这很有用。
std::ofstream ofile; for(unsigned int n = 0; ; ++ n) { std::string fname = std::string("log") + std::tostring(n) + std::string(".txt"); std::ifstream ifile; ifile.open(fname.c_str()); if(ifile.is_open()) { } else { ofile.open(fname.c_str()); break; } ifile.close(); } if(!ofile.is_open()) { return -1; } ofile.close();
5条答案
按热度按时间prdp8dxp1#
可以使用
c_str
成员函数从std::string
获取const char*
。如果你不想使用
std::string
(也许你不想分配内存),那么你可以使用snprintf
来创建一个格式化字符串:n
这里是文件名中的数字。7jmck4yq2#
dnph8jn43#
...创建文件名的另一种方法
flvlnr444#
样本代码:
yk9xbfzb5#
我使用下面的代码来实现这一点,您可能会发现这很有用。