您的位置:首页 > 其它

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

2017-12-02 17:21 267 查看
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;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: