首頁  >  問答  >  主體

C++中fstream的read问题。

 int main(){
    fstream file1;
    char buffer[512];
    char c;
    file1.open("66666.txt", ios::in);
    file1.seekg(0, ios::end);
    string::size_type file_size = file1.tellg();
    cout<<file_size<<endl;
    file1.seekg(0, ios::beg);
    for(;;){
        file1.read(buffer, 512);
        cout<<file1.gcount()<<endl;
        cout<<file1.tellg()<<endl;
        if(file1.eof()){
            break;
        }

    }
    file1.close();
    cin>>c;
    return 0;
}

以上是我的代码和结果,我这个程序的目的是每次读取文件中的512个字节,输出是首先输出这个文件的总字节数,然后每次读的时候输出所读入的字节数以及当前get 流指针的位置。
我第一次读512字节之后,当前get流指针的位置不应该是512吗,为什么这个程序却跑出了533的结果?

天蓬老师天蓬老师2765 天前678

全部回覆(1)我來回復

  • 阿神

    阿神2017-04-17 13:04:47

    Stackoverflow上有答案(http://stackoverflow.com/questions/22984956/tellg-function-give-wrong-size-of-file)

    主要的意思是,tellg回傳給你的那個數字不是用來計算大小的,而是用來給你在以後想seek到同一個地方的時候使用的。同時也給了一個計算檔案尺寸的正確方法:

    file.ignore( std::numeric_limits<std::streamsize>::max() );
    std::streamsize length = file.gcount();
    file.clear();   //  Since ignore will have set eof.
    file.seekg( 0, std::ios_base::beg );

    回覆
    0
  • 取消回覆