使用std::ios_base::trunc标志的目的是什么std::ios_base::out?我在很多例子中都看过这个.
我认为标准std::ios_base::out也保证了截断文件(以及我知道的所有STL实现).我错了,应该明确通知我要截断文件?
是的,std::ios_base::out相当于"w"在fopen.
重点std::ios_base::trunc在于std::ios_base::in和std::ios_base::out何时同时使用。
in | out相当于"r+"in | out | trunc相当于"w+"binary | in | out相当于"rb+"binary | in | out | trunc相当于"wb+"也许一张表格会更明显:
binary in out trunc | stdio equivalent
-----------------------+-----------------
+ + | "r+"
+ + + | "w+"
+ + + | "r+b"
+ + + + | "w+b"
Run Code Online (Sandbox Code Playgroud)
要替换文件的内容而不是扩展文件,必须在
std::ios_base::out | std::ios_base::trunc
对于输出文件流,打开模式 out 等价于out|trunc,即trunc可以省略标志。
但是,对于双向文件流,trunc必须始终明确指定。
要扩展输出文件,使用标志std::ios_base::ate | std::ios_base::app。
这里,文件内容被保留,因为trunc没有设置标志,初始文件位置在文件的末尾。
但是,trunc可以设置额外的 标志,并丢弃文件内容并在空文件的末尾完成输出。
| 归档时间: |
|
| 查看次数: |
2306 次 |
| 最近记录: |