我对操作文件有一些疑问;
a。)我对get和把指针放在c ++中有点困惑。我是否显示获取指针的正确位置并放置指针。
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 文件格式:二进制
答案 0 :(得分:4)
a)这是错的。文件流为输入和输出维护一个文件指针。 seekg
和seekp
都做同样的事情。有两个不同功能的原因是iostreams的接口是通用的,它可以用于有单独的put和get指针的设备。
引用标准[filebuf]:
特别是:
- 如果文件未打开以便读取,则无法读取输入序列。
- 如果文件未打开以进行写入,则无法写入输出序列。
- 为输入序列和输出序列维护联合文件位置。
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