Re[6]: Изменение переменной там где это не должно быть
От: SmokerMan  
Дата: 16.10.04 14:54
Оценка:
LPCSTR GetAttach(LPSTR FileName)
{    
    MSG_MULTIPART = false;
    //n?eouaaai oaee n ienuiim a aooa?
    FILE *stream = NULL;
    STRINGVECTOR Letter;
    char TempStr[150];
    int iterator=0;
    if( (stream = fopen( FileName, "rt" )) != NULL  )
    {
       while (!feof(stream)) 
        {
                   if(fgets(TempStr, 150, stream)==NULL)
            {
                            break;
            }
            Letter.push_back(TempStr);
        memset(TempStr, NULL, 150);
        iterator++;
        }
    }
    fclose(stream);

    const int StringNum = iterator;
    LPCTSTR BoundaryStr = "boundary=\"";
    int i =0;
    int FirstSim;
    int FirstBoundaryStringNum = 0;

    for ( i =0; i < iterator; i++)
     {
         if ((FirstSim = Letter[i].Find(BoundaryStr)) != -1)
         {
         FirstBoundaryStringNum = i;
         break;
         }
            
     }
     if (FirstBoundaryStringNum != 0)
     {
     MSG_MULTIPART = true;
     }
     if (!MSG_MULTIPART)
     {
     char *log_mes = "no attached files in the letter";
     WriteLog(log_mes);
         return "ERROR";
     }
     CString BoundaryCode;
     CString temp = Letter.operator [](i).Right(Letter.operator [](i).GetLength() - FirstSim - 10);
     BoundaryCode = temp.Left(temp.GetLength() - 2);
     CString BoundaryPrefix = "--";
     CString BoundaryFull = BoundaryPrefix + BoundaryCode;
     int ThirdBoundaryStringNum =0;
     int ForthBoundaryStringNum =0;
         int MeetBound = 0;
     for ( i = FirstBoundaryStringNum+1; i < StringNum; i++)
     {
     if((Letter[i].Find((LPCTSTR)BoundaryFull) != -1))
         {
             MeetBound++;
              if (MeetBound == 2)
        {
                ThirdBoundaryStringNum = i;
        }
         if (MeetBound == 3)
        {    
        ForthBoundaryStringNum = i;
        break;
        }    
        }
        }
        FILE *outstream;
        srand( (unsigned)time( NULL ) );
        char temp_rand[6];
        _itoa(rand(), temp_rand, 10);
        CString TempFolder = temp_rand;
        TempFolder = "e:\\ctb_server\\" + TempFolder;
        if (_mkdir(TempFolder) == -1)
        {
            WriteLog("cannot create temprorary folder");
            return "ERROR";
        } 

        int temp_search = Letter[ThirdBoundaryStringNum + 3].Find('"');
        int temp_search1 = Letter[ThirdBoundaryStringNum + 3].ReverseFind('"');
        CString ExtractedFileName = Letter[ThirdBoundaryStringNum + 3].Mid(
                                    temp_search+1,
                                     temp_search1
                                     -temp_search
                                     -1);

        
        const LPCSTR OutFileName = (LPCTSTR) (CString(TempFolder) +CString("\\") + CString(ExtractedFileName));
        CString name(OutFileName);
        MessageBox(NULL, "schas bydet outfilename", NULL, MB_OK);
        CString EncodedFile;
        CString DecodedFile, TempFile, Temp1;
         if( (outstream = fopen( OutFileName, "wb" )) != NULL  )
         {MessageBox(NULL, OutFileName, NULL, MB_OK);
         name.LockBuffer();
             
        for (i= ThirdBoundaryStringNum +5; i < ForthBoundaryStringNum-1; i++)
        {
    
        Temp1 = Letter[i].Left(Letter[i].GetLength() - 1);/*вот это строка как показал дебаггер и меняет OutFileName, но как?*/
            unsigned char buff[4];
            CString tempstr;
              while ( Temp1.Left(4).GetLength()!=0) 
              {
                    for (int j=0; j<4; j++)
                    {
                    buff[j] =  Temp1[0];
                    Temp1.Delete(0,1);
                    }
                fprintf(outstream,"%c",b(buff[0])<<2   | b(buff[1])>>4 & 0x3 );
                isEnd(buff[2])
                fprintf(outstream,"%c",b(buff[1])<<4 | b(buff[2])>>2 & 0xF);
                isEnd(buff[3])
                fprintf(outstream,"%c",b(buff[2])<<6 | b(buff[3]) & 0x3F);
              }
                    }
     }    
         name.UnlockBuffer();/*UnlockBuffer и LockBuffer решили проблему но ведь это неправильно*/
         MessageBox(NULL, name, NULL, MB_OK);
             fclose(outstream);
        return name;
}

Вот весь код функции, кто скажет как это исправить?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.