文件操作|得到并把指针

时间:2011-11-08 11:04:30

标签: c++ database file

我对操作文件有一些疑问;

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 文件格式:二进制

1 个答案:

答案 0 :(得分:4)

a)这是错的。文件流为输入和输出维护一个文件指针。 seekgseekp都做同样的事情。有两个不同功能的原因是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