c++ 当我打开一个文件时,我必须搜索到开头吗?

nbysray5  于 2022-12-15  发布在  其他
关注(0)|答案(4)|浏览(177)

我一直在浏览fopenifstream的文档,但我找不到的是,在打开文件后是否需要查找到文件的开头。我 * 认为 * 我可以假设我不需要,我所做的实验也支持这一假设,但我发现检查一下更安全。

olmpazwi

olmpazwi1#

https://en.cppreference.com/w/c/io/fopen
表示这取决于你打开文件的模式。例如,如果是“append”--指针被设置为EOF。

v9tzhpje

v9tzhpje2#

对于fstream对象,它取决于openmode(对于ifstream,默认为in)。对于stdio,它取决于传递给fopen的mode参数。
https://en.cppreference.com/w/cpp/io/basic_filebuf/open开始

所以对于一个以"r"/in打开的文件,答案是否定的,你不需要从头开始查找。显然,从一个以只读方式打开的文件的任何其他地方开始查找是没有意义的。

v7pvogib

v7pvogib3#

否,初始文件位置指示符将位于文件的开头。
根据7.21.3文件,C11标准(草案)第1段(粗体):
流与外部文件相关联(可能是物理设备),这可能涉及创建新文件。创建现有文件会导致其以前的内容被丢弃(如有必要)。如果文件可以支持定位请求(例如磁盘文件,与终端相对),则与该流相关联的文件位置指示符被定位在开始文件的(字符数零),除非文件是以附加模式打开的,在这种情况下,它是实现-定义文件位置指示符最初是位于文件的开头还是结尾。文件位置指示符由随后的读、写和定位请求来维护。以便于有序地通过文件。
请注意,如果文件是以追加模式打开的,则初始位置是由实现定义的。

y3bcpkx1

y3bcpkx14#

您不需要查找,因为默认情况下阅读将从文件的开头开始。

相关问题