C++ 如何读取多个文件后存储到一个文件中

2025-02-27 07:23:00
推荐回答(3个)
回答1:

#include 
#include 
#include 
#include 
using namespace std;
//用于读取各类文件的函数模板
template 
int loadfile(list &basic_any,string &filename)
{
ifstream infile(filename);
int num=0;
if (!infile){
cout <<"没有找到此数据文件!"< }
else {
basic_l temp;
while (infile >> temp){
basic_any.push_back(temp);
num++;
}
infile.close();
infile.clear();
}
return num;
}
//用于写入各类文件的函数模板
template 
void savefile(list &basic_any, string &filename)
{
ofstream outfile(filename);
list::iterator li_f = basic_any.begin();
list::iterator li_e = basic_any.end();
for(;li_f!=li_e;li_f++){
outfile<<*li_f;
}
outfile.close();
outfile.clear();
}
class BaseData
{
friend istream& operator >> (istream &in, BaseData &m_class)
{
in >> m_class.line
>> m_class.tim
>> m_class.live1
>> m_class.live2
>> m_class.row;
return in;
}
friend ostream & operator << (ostream& out, BaseData& m_class)
{
out << m_class.line <<"\t"
< < < < return out;
}
public:
int line;
float tim;
float live1;
float live2;
int row;
};

int main()
{
list  a;
string b;

cout<<"请输入所有文件名,空格或回车间隔,按Ctrl+Z结束"< while(cin>>b){
loadfile(a,b);
}
cout <<"请输入要保存的文件名"< cin>>b;
savefile(a,b);
}

回答2:

文件名有规律,可用程序生成输入文件名。
例如:for (i=1;i<=n;i++) sprintf(namein,"aa%d.txt",i);
生成输入文件名 aa1.txt, aa2.txt, aa3.txt ...

不要求选择数据,那么可以用循环语句按行读入,按行写出。

程序如下:
#include
#include
using namespace std;
#include
main(){
FILE *fin, *fout;
char namein[80];
char line[80];
int i,j;
int n=4;fout = fopen("abc.txt","w"); // 输出文件
for (i=1;i<=n;i++){
sprintf(namein,"aa%d.txt",i); //输入文件名
fin = fopen(namein,"r"); // 打开1个文件
if (fin !=NULL){
while(1){
if (fgets(&line[0],80,fin)==NULL) break; // 读1行
fprintf(fout,"%s",line); //写1行
};
fclose(fin);
};
}
fclose(fout);
return 0;
}
======
更简单的是用system(), 调 DOS copy 命令来做。

回答3:

这里假设string类型可能包含任意字符。否则,只需用不可能出现的字符分隔开即可。
因此,唯一的办法是将string的长度也写入到文件当中。下面是示例:
#include
#include
#include
#include
#include

inline void WriteString(std::ostream& ostr, std::string const& str) {
// 写入字符串长度
ostr << str.size() << "\n";
// 写入字符串
ostr.write(str.data(), str.size());
}

inline std::string ReadString(std::istream& istr) {
// 获取字符串长度
std::string line;
std::getline(istr, line);
std::istringstream tmp(line);
std::size_t size;
tmp >> size;
// 读取字符串
std::vector result(size);
istr.read(result.data(), size);
return std::string(result.begin(), result.end());
}

int main() {
std::string const filename = "t.txt", s1 = "string 1 \n Yeah!", s2 = "string 2 \\ Yep!";
{
std::ofstream ostr(filename);

WriteString(ostr, s1);
WriteString(ostr, s2);
}
{
std::ifstream istr(filename);
std::cout << (ReadString(istr) == s1 && ReadString(istr) == s2) << "\n";
}

return 0;
}