C++ std::fstream open mode

C++ std::fstream open mode
从旧blog转移过来的。
前些日子写数据库实验的时候,为了这些知识没少头疼过,基础贫弱啊。
ios::app:   以追加的方式打开文件 
ios::ate:   文件打开后定位到文件尾,ios:app就包含有此属性 
ios::binary:  以二进制方式打开文件,缺省的方式是文本方式。两种方式的区别见前文 
ios::in:    文件以输入方式打开 
ios:out:   文件以输出方式打开 
ios::nocreate: 不建立文件,所以文件不存在时打开失败  
ios::noreplace:不覆盖文件,所以打开文件时如果文件存在失败 
ios::trunc:  如果文件存在,把文件长度设为0
说下某些地方用过之后的惊奇吧(说惊奇其实只是自己之前把知识理解歪了而已)。
ios::app,该模式只能把数据添加到文件的尾部,如果想修改别的地方是不行的,因为seekp()根本不起作用,指针总是指向末尾,而我之前一直误解该模式等价于ios::out | ios::nocreate。
ios::in | ios::app,也是拜对ios::app的错误理解所赐,居然认为这是ios_in | ios_out,结果数据库的文件是越写越长,自己还一愣一愣的。
ios_binary,感觉只是一个表达指示作用,事实上,用read,write方法的话,都是进行二进制操作的。不过可能添加这个指示的话,会有优化作用?没校验过。
终于明白ios_binary的意义了,如果操作的真的是二进制文件,那么就一定要指定它。我今天操作一个文件时没有指定它,结果写进去的buffer是一行一行的,因为buffer的最后一个是换行符。后来指定为binary之后,写入的内容终于连续了。

你可能感兴趣的:(C++ std::fstream open mode)