CString 文件修改指定位置的字符串(文件大小不变)



int modify_file_psn( const CString& FilePath, char *psn, int write_file_pos )          
{                              
    ASSERT(FilePath != "");
    char* pszBuffer = NULL;
CString fileString; 
CString filelineString_L, filelineString_M, filelineString_R; 
CString filelineString_LMR;
CStdioFile f;  
    CFileException e;  
    int pre_pos, current_pos, new_pos;
    int ret;
    int length;
    int find_line;
    const int BUFFER_LENGTH = 1024 * 2;
                                                  
    pszBuffer = new char[BUFFER_LENGTH];  
    if( !f.Open( FilePath, CFile::modeReadWrite, &e) ){  
        return FALSE;  
    }
    find_line = 0x00;
    while( f.ReadString(fileString) != FALSE ){   
      //g.WriteString( DecimalToBinary(fileString)+"\r\n");
 ret = fileString.Find( L"var code = String" );
      if( ret == -1 ){
          pre_pos = f.GetPosition();  
          continue;
 }else{
          find_line = 0x01;  
     current_pos = f.GetPosition();
          TRACE( "fileString = %S.\n", fileString );
          break;
 }
    }
    if( find_line == 0x00 ){
        goto exit_func;
    }
      
TRACE( "pre_pos = %d.\n", pre_pos );
TRACE( "current_pos = %d.\n", current_pos );
length = fileString.GetLength();
TRACE( "length = %d.\n", length );

    //ÐÞ¸Ä×Ö·û´®,×ܳ¤¶È²»ÒªÐÞ¸Ä
if( current_pos == (pre_pos+length+2) ){
        TRACE( "match ok.\n" );
        ret = fileString.Find( L"(" );
TRACE( "ret = %d.\n", ret );
if( ret == -1 ){
            goto exit_func;
}
        
        filelineString_L = fileString.Left(ret);
ret = fileString.Find( L")" );
        filelineString_R = fileString.Right(length-ret-1);
filelineString_M.Format(L"(%S)", psn);
filelineString_LMR = filelineString_L + filelineString_M + filelineString_R;
length = filelineString_LMR.GetLength();
   TRACE( "length = %d.\n", length );
f.Seek( pre_pos, CFile::begin );
f.WriteString( filelineString_LMR );
new_pos = f.GetPosition();
TRACE( "new_pos = %d.\n", new_pos );
}
    exit_func:
f.Flush();
f.Close();
    delete[] pszBuffer;
    pszBuffer = NULL;
    return true;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值