c++ - 制作文件的顺序列表

标签 c++

我一直被一个问题困住了一段时间,似乎找不到答案。 我试图每次都创建多个名称相同但末尾编号不同的文件,我一开始只是通过使用

int seq_number = 1;
while (seq_number < 10)
{
ofstream fsave;
fsave.open("filename" + seq_number + ".txt");
fsave << "blablabla";
fsave.close();
seq_number = seq_number + 1;
}

但这给了我一个非常奇怪的结果,即字母变得困惑,我不确定它是如何工作的,但我知道它不会。

我在网上查找并找到了 stringstream 或 sstream,并尝试使用它,但它也一直给我错误,

string filename;
filename = "character";
ostringstream s;
s << filename << seq_number;
filename(s.str());
fsave.open(filename + ".txt");
fsave << "blabla"
fsave.close(;)

但我一直收到错误:

调用“(std::string) (std::basic_string, std::allocator >)”不匹配

我不确定字符串流是如何工作的,所以我是凭直觉工作的,但我很感激任何可能的方式,老实说,我想我更愿意在没有 sstream 的情况下这样做,但我需要一种方法来获得一个int 和 str 一起保存一个文件名,它是一个字符串。 除非你知道更好的方法;)谢谢大家

最佳答案

filename(s.str());

这是错误的;你不是在构建一个新变量(filename 已经构建),你在这里想要的是一个赋值。

filename = s.str();

然后,

fsave.open((filename + ".txt").c_str());

(不过,如果您使用的是 C++11,则无需进行此更改)

不过,我个人还是会用流构造整个文件名:

ostringstream s;
s<<"character"<<seq_number<<".txt";
fsave.open(s.str.c_str());

I'm not sure how string stream works exactly so im working off of instinct

这是一个非常糟糕的主意,C++ 通常是一个充满奇怪语法、段错误和未定义行为的雷区,凭本能行事通常会导致灾难。


关于你得到的错误:

fsave.open("filename" + seq_number + ".txt");

这甚至不应该编译,因为您正在将整数求和到 const char *(因此移动“字符串的开头”),然后再次将它求和到 const char *,这是根本不允许的。如果它是这样的,也许它可以编译:

fsave.open("filename" + seq_number);

但它不会给出所需的结果 - "filename" 是一个指针(不是 C++ 字符串),因此对它求和一个整数只会移动给定偏移量的指针。

相反,在您的第二个片段中,您使用的是一个对象 (filename),因为它是一个函数,只有在类重载 operator() 时才允许这样做;因此,编译器会提示该对象不允许这样的操作。

关于c++ - 制作文件的顺序列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18489854/

相关文章:

c++ - MSVC 如何在编译期间将某些内容输出到 "output"窗口

c++ - C 中对子数组进行排序会对整个数组进行排序?

c++ - 漂亮地将解析树打印到标准输出?

c# - 以编程方式限制外部进程资源

c++ - 双向链表,按顺序添加节点

c++ - 如何根据 Valgrind 输出进一步调试

c++ - 在 C++ 中为 OpenSSL 中的 SSL_read 设置连接超时

c++ - gtest : check if string is equal to one of two strings

c++ - 无法在 Ubuntu 中的 Eclipse 上进行调试

c++ - 永无止境的 Win32 消息循环