c ++ seekp(0,ios :: end)不起作用

时间:2015-12-12 08:56:21

标签: c++ file fstream

为我可怜的英语道歉。 我被fstream困在C ++中。这是我的代码。

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

struct TestStruct
{
    int a;
    char str[30];
    TestStruct(int a_, const char* s)
    {
        a = a_;
        strcpy_s(str,sizeof(char)*30, s);
    }
    TestStruct() = default;
};

int main()
{
    fstream output("out.bin", ios::out|ios::binary);
    output.seekp(0,ios::end);
    cout << output.tellp() << endl;

    for (int i = 0; i < 15; i++) {
        TestStruct a(10*i, "asdadas");
        output.write(reinterpret_cast<char*>(&a), sizeof(a));
    }

    output.close();
    fstream input("out.bin", ios::in | ios::binary);
    input.seekg(2 * sizeof(TestStruct), ios::beg);

    for (int i = 0; i < 5; i++) {
        TestStruct a;
        input.read(reinterpret_cast<char*>(&a), sizeof(a));
        cout <<"file_pointer"<<input.tellg()<<'\t'<<a.a << endl;
    }
}

我使用seekp(0,ios::end)在文件中添加新条目。因此,当我运行此代码时,文件应该变得更大。但实际上文件根本没有变化。

这是输出:

>     0                  <--tellp() always return 0
>     file_pointer108 20
>     file_pointer144 30
>     file_pointer180 40
>     file_pointer216 50
>     file_pointer252 60

1 个答案:

答案 0 :(得分:1)

ios::app添加到output的标记中。那时你不需要做output.seekp(0, ios::end);