我需要合并两个文本文件,方法是将它们放在一个矢量数组中,然后将它们写入一个新的文本文件中。 合并后。新文件有额外的字符。
FE:
f1.txt ("text1")
f2.txt ("text2.")
f12.txt ("text1˙text2.˙W64")
缓冲区的内容:" text1 text2。 W64"
以下是代码:
int main(){
enum errorcode{FNF,FNC};
vector<char> buffer;
char ime[255];
cin>>ime;//first file
ifstream ud1(ime,ios::in);
if(ud1.is_open()){
while(!ud1.eof())buffer.push_back(ud1.get());
ud1.close();
}
else {cout<<"File not found.";return FNF;}
cin>>ime;//second file
ifstream ud2(ime,ios::in);
if(ud2.is_open()){
while(!ud2.eof())buffer.push_back(ud2.get());
ud2.close();
}
else {cout<<"File not found.";return FNF;}
cin>>ime;//new file
ofstream id(ime,ios::out);
if(id.is_open()){
for(int i=0;i<buffer.capacity();i++)id.put(buffer[i]);
id.close();
}
else {cout<<"File not created.";return FNC;}
return 0;
}
我想这是因为记事本或文件本身。 你能告诉我这个原因。
答案 0 :(得分:0)
您正在使用Vector capacity:返回当前为向量分配的存储空间的大小,以元素的形式表示。
您必须使用vector size:返回向量中的元素数。这是矢量中保存的实际对象的数量,不一定等于其存储容量。
关于˙
请查看istream::get返回值:
返回值
如果流中没有可用字符,则第一个签名返回字符读取或文件结束值(EOF)(请注意,在这种情况下,还会设置failbit标志)。
所以,您可以将循环更改为:
while(!ud1.eof()){
int tmpChar = ud1.get();
if( !ud1.eof() )
buffer.push_back(tmpChar);
}