#include <iostream> #include <fstream> #include <string> #include <map> #include <SimpleIni.h> #include <sstream> using namespace std; int main() { map<string, string> config; CSimpleIniA ini; ini.LoadFile("config.ini"); string filename = ini.GetValue("Section1", "filename", ""); config["filename"] = filename; string txt = ini.GetValue("Section1", "txt", ""); stringstream txt_stream(txt); string line; while (getline(txt_stream, line)) { config["txt"] += line + "\n"; } ofstream file(config["filename"]); if (file.is_open()) { file << config["txt"]; file.close(); cout << "文件已成功生成!" << endl; } else { cout << "无法创建文件。" << endl; } return 0; } 这段代码有问题,文件只读取到最后一行内容
时间: 2023-06-17 11:07:20 浏览: 100
这是因为在读取 `txt` 配置时,使用了 `stringstream` 对其进行了处理。而在 `stringstream` 对象被销毁前,只有最后一行内容被保存在 `config["txt"]` 中。解决这个问题的方法是使用另外一种方式读取文件内容。可以尝试使用 `ifstream` 对象来读取文件,然后将每一行的内容添加到 `config["txt"]` 中。修改后的代码如下:
```c++
#include <iostream>
#include <fstream>
#include <string>
#include <map>
#include <SimpleIni.h>
using namespace std;
int main() {
map<string, string> config;
CSimpleIniA ini;
ini.LoadFile("config.ini");
string filename = ini.GetValue("Section1", "filename", "");
config["filename"] = filename;
string txt_file = ini.GetValue("Section1", "txt", "");
ifstream txt(txt_file);
if (txt.is_open()) {
string line;
while (getline(txt, line)) {
config["txt"] += line + "\n";
}
txt.close();
}
else {
cout << "无法打开文件 " << txt_file << endl;
return 1;
}
ofstream file(config["filename"]);
if (file.is_open()) {
file << config["txt"];
file.close();
cout << "文件已成功生成!" << endl;
}
else {
cout << "无法创建文件。" << endl;
}
return 0;
}
```
这样修改后可以正确读取文件的所有行,并将其保存在 `config["txt"]` 中。
阅读全文