gpt4 book ai didi

c++ - 文件操作 |获取和放置指针

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:56:37 25 4
gpt4 key购买 nike

我有一些关于操作文件的问题;

a.) 我对 C++ 中的 get 和 put 指针有点困惑。我是否显示了获取指针和放置指针的正确位置。

MyFile . seekg ( 0 , ios :: beg ) ;
MyFile . seekp ( -10 , ios :: end ) ;

index :0 1 2 3 4 5 6 7 8 9 10 ... -10 -9 -8 -7 -6 -5 -4 -3 -2 -1 0
__________________________________________________________________
^ ^
^ ^
^ ^
get Pointer put pointer

Myfile . get ( character ) ;
MyFile . write ( SomeString, 4 ) ;
MyFile . flush ( ) ;

index :0 1 2 3 4 5 6 7 8 9 10 ... -10 -9 -8 -7 -6 -5 -4 -3 -2 -1 0
__________________________________________________________________
^ ^
^ ^
^ ^
get Pointer put pointer

i.) Seekg 和 seekp 是否始终保证获取的 put 指针始终显示正确的位置?
ii.) 如果你对这个主题了解更多,你能告诉我一些要点吗?我在使用它们时应该小心,(如果有的话)

b.) 是

   FileIN . seekg ( 1, ifstream :: cur ) ;

等于

   FileIN . seekg ( 1, ios :: cur ) ; 

平台:linux文件格式:二进制

最佳答案

a) 这是错误的。文件流为输入和输出维护一个文件指针。 seekgseekp 做同样的事情。有两个不同函数的原因是 iostreams 的接口(interface)是通用的,它可以用于有单独的 put 和 get 指针的设备。

引用自标准[filebuf]:

In particular:

— If the file is not open for reading the input sequence cannot be read.

— If the file is not open for writing the output sequence cannot be written.

A joint file position is maintained for both the input sequence and the output sequence.

b) 是的,它们是一样的。

编辑:

index :0 1 2 3 4 5 6 7 8 9 10  ...          -10 -9 -8 -7 -6 -5 -4 -3 -2 -1 0  
_____________________________________________________________________
^ file-pointer

MyFile . seekg ( 0 , ios :: beg ) ;

index :0 1 2 3 4 5 6 7 8 9 10 ... -10 -9 -8 -7 -6 -5 -4 -3 -2 -1 0
_____________________________________________________________________
^ file-pointer

MyFile . seekp ( -10 , ios :: end ) ;

index :0 1 2 3 4 5 6 7 8 9 10 ... -10 -9 -8 -7 -6 -5 -4 -3 -2 -1 0
_____________________________________________________________________
^ file-pointer

Myfile . get ( character ) ;
// you must sync/flush if your last operation was input and you switch to output,
// or your last operation was output and you switch to input.
MyFile . sync ( ) ;

index :0 1 2 3 4 5 6 7 8 9 10 ... -10 -9 -8 -7 -6 -5 -4 -3 -2 -1 0
_____________________________________________________________________
^ file-pointer

MyFile . write ( SomeString, 4 ) ;
MyFile . flush ( ) ;
index :0 1 2 3 4 5 6 7 8 9 10 ... -10 -9 -8 -7 -6 -5 -4 -3 -2 -1 0
_____________________________________________________________________
^ file-pointer

关于c++ - 文件操作 |获取和放置指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8049403/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com