当我打开一个文件时,我需要寻找到开头吗?

4
我一直在查看fopenifstream的文档,但我找不到的是在打开文件后是否需要寻找文件的开头。我认为我可以假设不需要这样做,并且我所做的实验支持这个假设,但我觉得最好还是确认一下。
4个回答

5

5
对于 fstream 对象,它取决于 openmode(默认为 inifstream)。而对于标准 I/O 则取决于传递给 fopen 的模式参数。
来源:https://en.cppreference.com/w/cpp/io/basic_filebuf/open

enter image description here

对于以"r" / in模式打开的文件,答案是否定的,您不需要寻找开头。显然,在只读文件中从其他任何地方开始都没有意义。


4

不会,初始文件位置指针将定位在文件开头。

根据7.21.3 Files,(draft) C11标准的第1段(我加粗):

通过打开文件(可能涉及创建新文件),将流与外部文件(可以是物理设备)相关联。如果创建现有文件,则必要时会丢弃其以前的内容。如果文件支持定位请求(例如磁盘文件,而不是终端),则与流相关联的文件位置指示器将定位在文件的开头(字符号零),除非使用追加模式打开文件,在这种情况下,实现定义文件位置指示器最初定位于文件的开头还是结尾。文件位置指示器由后续读取、写入和定位请求维护,以促进对文件的有序进度。

请注意,如果以追加模式打开文件,则初始位置是实现定义的。


2
unless the file is opened with append mode in which case it is implementation-defined whether the file position indicator is initially positioned at the beginning or the end of the file. - Martin
1
@Martin 确实。我正在添加,就在你发表评论的时候。 - Andrew Henle

0
您不需要寻找,因为默认情况下读取将从文件开头开始。

谢谢你的回答。你有参考资料吗? - bers
这并不总是如此。当以aa+模式打开文件时,文件指针会被设置到文件末尾。 - Bart Friederichs
1
C99 的第7.9.13节规定:“如果一个文件支持定位请求(如磁盘文件,而不是终端),则与流相关联的文件位置指示器将定位在文件的开头(字符号零)处,除非以追加模式打开文件,在这种情况下,文件位置指示器最初定位在文件的开头或结尾是由实现定义的。” - pmacfarlane
目前你的回答不够清晰,请编辑并添加更多细节,以帮助其他人理解它如何回答问题。你可以在帮助中心找到有关如何编写好答案的更多信息。 - Community

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接