2012-12-27 54 views
2

我的功能是copy2,我在cplusplus.com上找到了功能copy1,我用的是copy2并且有问题,但是拷贝1没问题,copy2导致关于测试文件mp3的atist,title,...的损失信息,我不明白为什么?为什么ofstream :: get()和put()会导致信息丢失?

#include <fstream> 
#include <iostream> 
using namespace std; 

void copy1() 
{ 
    char * buffer; 
    long size; 

    ifstream infile ("Test.mp3",ifstream::binary); 
    ofstream outfile ("Test2.mp3",ofstream::binary); 

    // get size of file 
    infile.seekg(0,ifstream::end); 
    size=infile.tellg(); 
    infile.seekg(0); 

    // allocate memory for file content 
    buffer = new char [size]; 

    // read content of infile 
    infile.read (buffer,size); 

    // write to outfile 
    outfile.write (buffer,size); 

    // release dynamically-allocated memory 
    delete[] buffer; 
    cout<<"xong"; 
    outfile.close(); 
    infile.close(); 
    return ; 
} 
void copy2(){ 
    ifstream infile ("Test.mp3",ios::binary); 
    ofstream outfile ("Test1.mp3",ios::binary); 
    char c; 
    while(!infile.eof()) 
    { 
    infile.get(c); 
    outfile.put(c); 
    } 
} 
int main() { 
    copy2(); 
} 
+0

你怎么知道信息丢失了?你用什么程序/工具/过程来确定? –

回答

0

while(!infile.eof())会引起麻烦,因为它可以返回在一定条件下错误的结果。 我有类似的问题。尝试使用像这样的东西:

while (getline(infile,data))           
    {           
      cout<<data<<endl; 
    } 
+0

为什么复杂呢? http://coliru.stacked-crooked.com/a/7bc6ba68e7212b3a –

相关问题