【杂谈】坑爹的 fstream open mode 细节问题

  最近在做数据结构的大作业,要写个简单的数据库,因此和 fstream 打交道略多。

ios::app:   以追加的方式打开文件 
ios::ate:   文件打开后定位到文件尾,ios:app就包含有此属性 
ios::binary:  以二进制方式打开文件,缺省的方式是文本方式。两种方式的区别见前文 
ios::in:    文件以输入方式打开 
ios:out:   文件以输出方式打开 
ios::nocreate: 不建立文件,所以文件不存在时打开失败  
ios::noreplace:不覆盖文件,所以打开文件时如果文件存在失败 
ios::trunc:  如果文件存在,把文件长度设为0

  以上是网络上都能找到的一些解释,但在使用过程中有些迷之问题。

1. ios::in | ios::out 在文件不存在的时候是不会创建新文件的,必须用个 ios::in | ios::out | ios::app

2. ios::app 无法seek到文件长度以外的地方 put('\0') 写一串空字符,根据网上有人说 ios::app 后就只能在文件后写,无法seek,有待验证,之后试验后补充

临时解决办法是 先用ios::app 在不存在的时候创建,再关闭,然后不用 ios::app 打开进行扩展空间

 

posted @ 2013-12-16 11:14  Azard  阅读(810)  评论(0编辑  收藏  举报