Ios有什么好玩:ios::app和ios::ate有什么区别

关于Ios有什么好玩的问题,在define ate中经常遇到,Possible Duplicate: C++ Filehandling:Difference between ios:app and ios:ate?

Possible Duplicate:
C++ Filehandling:Difference between ios:app and ios:ate?

这两种文件打开模式有什么区别?

ios:ate将 get / put 指针位置设置为文件的末尾,因此读取 / 写入将从末尾开始,但它与ios::app有何不同,后者再次在追加模式下打开文件?

当我创建了一个ofstream并在 'ios:app 模式下打开它时,put 流指针仍然指向开头,那么追加是如何工作的?

此外,我了解ifstreamofstreamfstream是用于管理底层流缓冲区的高级类。

这是否意味着即使在ios:app模式下,我也可以从文件中读取数据?

38

app来自 'append'-所有输出将被添加(追加)到文件的末尾。换句话说,你不能在文件的其他地方写,但在最后。

ate来自 'at end'-它在打开文件时将流位置设置在文件的末尾,但是您可以自由地移动它(查找)并在您喜欢的任何地方写入。

14

ate只是在打开后将您定位在文件的末尾,而没有别的。在ofstream上没有太多用处,至少没有其他标志,因为文件无论如何都会被截断,所以开始是结束。(为了避免截断,并且仍然能够在文件中的任何位置写入,您需要或在ios::in中,即使您不打算读取。)

app防止截断现有文件,并导致每次写入都转到文件的末尾。原子地,如果可能的话;如果其他进程正在写入同一文件,则您的写入仍应结束。但是请注意,这可能是指实际的系统级别写入。但是,如果您正在写入小于缓冲区大小的行,并且您可以在std::endl上终止每行。

在实践中,我不认为我曾经使用过它们中的任何一个,或者发现它们有任何用处。特别是app的缓冲问题,通常导致我编写自己的streambuf,在概念上具有无限的缓冲(std::vector<char>作为缓冲区),它以app的等效形式打开底层系统文件。

11

如果您查看例如this reference,您将看到:

app     seek to the end of stream before each write 

ate     seek to the end of stream immediately after open 

这意味着ios::app仅在末尾写入,而ios::ate默认在末尾读取和写入。但是,使用ios::ate,您可以在文件中自由查找,但是使用ios::app,无论您为写入指针设置什么位置,您都将始终在末尾写入。

本站系公益性非盈利分享网址,本文来自用户投稿,不代表码文网立场,如若转载,请注明出处

(399)
联想电脑c盘满了怎么清理:在联想 A1000-T的fastboot模式下打开 android平板电脑
上一篇
Mann手机:R中的MannWhitney U测试
下一篇

相关推荐

发表评论

登录 后才能评论

评论列表(25条)