C ++:每当我通过fstream阅读时,我最后得到了1个额外的字符

时间:2010-05-06 19:18:24

标签: c++ fstream

每当我通过fstream阅读时,我最后会得到一个额外的字符,我该如何避免这个?

编辑:

ifstream readfile(inputFile);
ofstream writefile(outputFile);
char c;
while(!readfile.eof()){
      readfile >> c;
      //c = shiftChar(c, RIGHT, shift);
      writefile << c;
}
readfile.close();
writefile.close();

2 个答案:

答案 0 :(得分:7)

这通常是由于错误地测试文件末尾造成的。您通常希望执行以下操作:

while (infile>>variable) ...

或:

while (std::getline(infile, whatever)) ...

但不是:

while (infile.good()) ...

或:

while (!infile.eof()) ...

编辑:前两个执行读取操作,检查是否失败,如果是,则退出循环。后两个尝试读取,处理“读取”的内容,然后在下一次迭代时退出循环,如果先前的尝试失败。

Edit2:将一个文件轻松复制到另一个文件,请考虑使用以下内容:

// open the files:
ifstream readfile(inputFile);
ofstream writefile(outputFile);

// do the copy:
writefile << readfile.rdbuf();

答案 1 :(得分:0)

根据代码,你想要做的是将一个文件的内容复制到另一个文件?

如果是这样,我会尝试这样的事情:

ifstream fin(inputFile, ios::binary);

fin.seekg(0, ios::end);
long fileSize = fin.tellg();
fin.seekg(0, ios::beg);

char *pBuff = new char[fileSize];
fin.read(pBuff, fileSize);
fin.close();

ofstream fout(outputFile, ios::binary)
fout.write(pBuff, fileSize);
fout.close;
delete [] pBuff;