为什么tellp()对ios:app返回0,而对ios:ate不返回
Why does tellp() return 0 for ios::app but not for ios::ate?
我有以下代码片段:
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::app
或ios::ate
时,line 1
的输出为0,但只有当它们都在一起时,它们才会给出正确的文件位置。为什么会发生这种情况?附言:我知道ios:app和ios:ate之间的区别。
提前感谢!
来自std::ios::openmode(C++11第27.5.3.1.4节)
std::ios::app
意味着在每次写入之前寻找流的末尾。因此,流可能不在任何写操作之前的末尾。无论指针在哪里(0
或其他地方),写入总是在末尾完成。(每次写入操作前隐式查找结束)
CCD_ 6意味着在打开之后立即寻找流的末尾,从而保证返回文件的大小。
进一步阅读:C++文件处理:ios:app和ios:ate之间的区别?
相关文章:
- 来自 std::list 的迭代器 .end() 按预期返回"0xcdcdcdcdcdcdcdcd"但 .begin()
- 什么时候在C++中返回常量引用是个好主意
- 你能重载对象变量名本身返回的内容吗
- 为什么 Serial.println(<char[]>);返回随机字符?
- C++映射:具有自定义类的运算符[]不起作用(总是返回0)
- 如何获取std::result_of函数的返回类型
- QueryWorkingSet总是返回false
- (C++)分析树以计算返回错误值的简单算术表达式
- 访问者访问变体并返回不同类型时出错
- 如何返回一个类的两个对象相加的结果
- OpenInventor从9.8升级到10.4.2后,GLSL纹理返回零
- lower_bound()返回最后一个元素
- "throw expression code" 1e7 >返回 d 是什么?投掷标准::overflow_error( "too big" ) : d;意味 着?
- 奇怪的(对我来说)返回声明 - 在谷歌上找不到任何关于它的信息
- 如何取消对nullptr的屏蔽,返回正确的对象
- Strftime在iOS上返回一周中不正确的一天
- glGetUniformLocation OpenGL ES 2.0(在ipad 3 iOS 7.0.3上返回错误结果)
- 为什么tellp()对ios:app返回0,而对ios:ate不返回
- stringstream-sgetn在iOS 5.1上返回NULL
- glCreateShader和glCreateProgram在SDL 2 IOS中返回0