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;
}