求助:C++ 利用文件流的内容合并两个文件

我想实现两个文件的合并,思路大概是以在文件尾写的方式打开第一个文件fs1,以读的方式打开文件fs2,获取fs2的大小,并申请内存缓冲区保存fs2的内容,最后将缓冲区保存的... 我想实现两个文件的合并,思路大概是以在文件尾写的方式打开第一个文件fs1,以读的方式打开文件fs2,获取fs2的大小,并申请内存缓冲区保存fs2的内容,最后将缓冲区保存的fs2的内容写入fs1文件中,释放缓存区。不要用FILE *filename之类的,入口参数文件是以string filename传进来的。
fstream fs1, fs2;
fs1.open( filename1.c_str(), ios::out | ios::app );
fs2.open( filename2.c_str(), ios::in );
long fsize = filename2.size();//不知道对不对?
char *buf = new char[ fsize ];
memset( buf, 0x0, fsize );
read函数;//read函数有3个形参,第一个是int型的,要怎么得到?FILE *filename的话是通过int fn=fileno( fs2 )文件描述符来实现的,string这里要怎么实现?
write函数;//问题同read函数
fs1.close(fs1);
fs2.close(fs2);
delete[] buf;
请各位高手帮个忙,看看我想的这个怎么实现,菜鸟在此谢过了!!!!!!
展开
 我来答
心中风情4
2013-08-14 · TA获得超过2247个赞
知道大有可为答主
回答量:1779
采纳率:66%
帮助的人:1068万
展开全部
以下代码可供参考:
#include<iostream>
#include<fstream>
#include<string>
using namespace std;

void connect_file(string filename1, string filename2) {
fstream fs1, fs2;
fs1.open( filename1.c_str(), ios::out | ios::app );
fs2.open( filename2.c_str(), ios::in );
if(!fs1 || !fs2){
cout<<"File open error!\n";
return;
}

//following 2 lines is a way to get size of the file
fs2.seekg(0, ios::end);
int size = (int)fs2.tellg()+ 1;

//following 4 lines trying to read and write file
char *buf = new char[size];
fs2.seekg( 0 , ios::beg );
fs2.read(buf, size);
fs1.write(buf, fs2.gcount());

fs1.close();
fs2.close();
}

int main()
{
connect_file(string("test1.txt"), string("test2.txt"));
return 0;
}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
zhangqingxian
2013-08-14 · TA获得超过268个赞
知道小有建树答主
回答量:362
采纳率:0%
帮助的人:306万
展开全部
#include<iostream>
#include<fstream>
using namespace std;

string filename1="C:\1.txt";
string filename2="C:\\2.txt";
int main()
{
ifstream inFile;
inFile.open(filename1.c_str(), fstream::in|fstream::app);

ofstream outFile;
outFile.open(filename2.c_str(), fstream::out|fstream::app);

outFile.seekp(ios_base::end);
outFile << inFile.rdbuf();
inFile.close();
outFile.close();

return 0;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
而庅没页65
推荐于2018-03-30 · TA获得超过876个赞
知道小有建树答主
回答量:295
采纳率:100%
帮助的人:140万
展开全部
#include<iostream>
#include<fstream>
using namespace std;
int main(){
int i=1;
char c[1000];
ifstream ifile1("D:\\a.txt"); //在D盘建立.txt文件
ifstream ifile2("D:\\b.txt");
ofstream ofile("D:\\c.txt");
while(!ifile1.eof()){
ifile1.getline(c,999);
ofile<<c<<endl;
}
while(!ifile2.eof()){
ifile2.getline(c,999);
ofile<<c<<endl;
}
ifile1.close(); //关闭文本
ifile2.close();
ofile.close();
return 0;
}
2、
#include <iostream>
#include <fstream>
using namespace std;
bool isalph(char);
int main()
{
ifstream in("D:\\d.txt");
if(!in)
{
cerr<<"not open \n";
return 1;
}
int line=0,word=0,i;
char c[1000];
while(!in.eof())
{
in.getline(c,1000);
line++;
i=0;
while(c[i]!=0)
{
if(isalph(c[i]))
{
word++;
}
i++;
}
}
cout<<"Line="<<line<<endl;
cout<<"word="<<word<<endl;
return 0;
}
bool isalph(char c)
{
return ((c>='a'&&c<='z')||(c>='A'&&c<='Z')); //返回值内容
}
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式