我想实现的功能如下  : 先写123456,保存当前指针的位置,继续写abcdef,再移动指针到 123456后面写入2,最后移动指针到文件尾部写入123456.  写好后的文件 1234562abcdef123456  但是下面的代码,写出来的是  123456abcdef2123456 ,指针移动对文件写入没有影响了。。请教高手帮忙啊 !卡住了。
#include <iostream.h>
#include "fstream.h"
void main()
{
   fstream file;          
   file.open("c:\\123.txt",ios::binary|ios::in|ios::out|ios::app);
   file.write("123456",6);  
   int nptrseekgsta=file.tellp();    
   file.write("abcdef",6);     
   file.seekp(nptrseekgsta);      
    short slen=2;
    file.write("2",1);  
   file.seekp(ios::end);
   file.write("123456",6);  
   file.close();
}
谢谢啊 !!!

解决方案 »

  1.   

    那请问要实现这样的功能,怎末样修改啊?小弟是新手,对这个 fstream 类函数不熟悉啊 !!!谢谢啦!
      

  2.   

    file.seekp(nptrseekgsta, ios::begin);
      

  3.   

    file.write("123456",7); 
    int nptrseekgsta=file.tellp();    
    file.write("0",1); // 占个位置
    file.write("abcdef",6);
    file.seekp(nptrseekgsta, ios::begin);
      

  4.   

    不行啊 。。这样写出来的文件是  :123456 0abcdef2123456
    代码如下#include <iostream.h>
    #include "fstream.h"
    void main()
    {
    fstream file;          
    file.open("c:\\123.txt",ios::binary|ios::in|ios::out|ios::app|ios::trunc);
    file.write("123456",7); 
    int nptrseekgsta=file.tellp();    
    file.write("0",1); // 占个位置
    file.write("abcdef",6);
    file.seekp(nptrseekgsta, ios::beg);
        
        short slen=2;
        file.write("2",1);  
       file.seekp(ios::end);
       file.write("123456",6);  
       file.close();
    }
      

  5.   

    seekp就是定位用的,因为off表示当前已写入的字节数,而fout.seekp(off)每次都会定位到输出文件的尾部,所以确实没什么用。 
    seekp(n)就是将文件定位到第n个字节处,然后再用write就可以写入了。 这英文已经解释了seekp不起作用的原因:使用ios::app模式,新内容只会写到文件的后面,所以seekp没有起作用...如果要用seekp定位,把ios::app删掉就可以了。 
      

  6.   

    第一,去掉ios::app
    第二,file.write("123456",7); 是笔误,应该为file.write("123456",6)
    第三,file.seekp(ios::end);用法错误,应该为file.seekp(0, ios::end); fstream file( "123.txt",ios::binary | ios::in | ios::out | ios::trunc ); 
    file.write( "123456", 6 ); 
    int nptrseekgsta = file.tellp();
    file.write( "0", 1 ); // 占个位置 
    file.write( "abcdef", 6 ); 
    file.seekp( nptrseekgsta, ios::beg ); 
    file.write("2",1); 
    file.seekp( 0, ios::end ); 
    file.write("123456",6);  
    file.close(); 
      

  7.   

    另外,这段代码只适用于楼主所提的问题,其实我看过你另外一个提问,意思其实不是这样的。因为你所填充的“2”这个字符在这里只占一个字节,可以确定大小;但是你可能要写的是不固定大小的字符数,因此还是不能预先确定字节数。另外再次提醒,流操作方式的fstream不适于随机访问方式;要随机访问还是fopen这种c函数方便。
      

  8.   

    才看了谭教授的红色C++书的文件操作那部分。
    可以用cin流的putback(char)函数实现在文件指针当前指向位置插入一个字符。
    注意,是插入哦  ^^