【问题标题】:Why does tellp() return 0 for ios::app but not for ios::ate?为什么tellp() 为 ios::app 返回 0 而不是 ios::ate?
【发布时间】:2015-05-05 09:18:12
【问题描述】:

我有以下代码 sn-p :

ofile.open("New1.dat",ios::app|ios::binary|ios::ate);
long bytes = ofile.tellp()/sizeof(t);
cout<<ofile.tellp()<<endl;    //line 1
t.input(bytes);
ofile.write((char *)&t,sizeof(t));
ofile.close();

当我删除 ios::appios::ate 时,line 1 的输出为 0,但是只有当它们在一起时,它们才会给出正确的文件位置。为什么会这样? 附言我知道 ios::app 和 ios::ate 之间的区别。

提前致谢!

【问题讨论】:

标签: c++ file-handling


【解决方案1】:

来自std::ios::openmode(C++11 的第 27.5.3.1.4 节)

std::ios::app 表示在每次写入之前查找流的末尾。因此,流可能不会在 任何写入操作之前结束。无论指针在哪里(0 或其他地方),写入总是在最后完成。 (在每次写操作之前隐式查找结束)

另一方面,std::ios::ate 表示在打开后立即寻找到流的末尾,从而保证返回文件的大小。

延伸阅读:C++ Filehandling: Difference between ios:app and ios:ate?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-02-24
    • 1970-01-01
    • 1970-01-01
    • 2015-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多