Создать новый файл журнала, как только он достигнет размера, указанного в MFC (VC ++)? - PullRequest
0 голосов
/ 07 декабря 2010

Я создал файл журнала с именем «NDSLog», теперь я хотел, чтобы, если файл NDSLog превышал его предел, новый файл создавался с именем NDSLog1 и т. Д. В настоящее время я могу создать файл NDSLog, и когда он превышает ограничиваю, я закрываю этот существующий файл и открываю новый файл.

Я хочу знать, могу ли я увеличить NDSLog до NDSLog1 и так далее, когда он достигнет этого предела?

Любая помощь высоко ценится.

Я использую метод WritetoLog для этого.

long CNDSLog::WriteLogData(char *logData, long lDataSize)
    {

if (m_File == NULL)
{
    GetFileName();
    OpenNewFile();
}
else
{
    long lFileSize = GetFileSize(m_sFileName);
    if (lFileSize > m_lFileSize)
    {
        CloseNewFile(); 
        GetFileName();
        OpenNewFile();
    }
}

WriteData(logData);

return ERR_NONE;

}

long CNDSLog::GetFileName()
{
    char ctemp[300];
int lLen = sprintf(ctemp,"%s",m_sFName.data());

if (lLen > 0)
{       
    if (m_sFileName != NULL)
    {
        delete [] m_sFileName;
        m_sFileName = NULL;
    }

    m_sFileName = new char[lLen + 1];
    memset(m_sFileName,0,lLen + 1);
    memcpy(m_sFileName,ctemp,lLen);
}

return ERR_NONE;

};

long CNDSLog::OpenNewFile()
{
    if (m_sFileName != NULL)
    {
        char strPathName[_MAX_PATH];
        ::GetModuleFileName(NULL, strPathName, _MAX_PATH);      

    // The following code will allow you to get the path.
    CString newPath(strPathName);
    int iPos = newPath.ReverseFind('\\');

    if (iPos != -1)
    newPath = newPath.Left(iPos+1);     
    newPath += "NDSLog\\" ;


    if (GetFileAttributes(newPath) == INVALID_FILE_ATTRIBUTES)
    {
      CreateDirectory(newPath,NULL);
    }   
    newPath +=  m_sFileName;        

    m_File = fopen(newPath,"at");
}
return ERR_NONE;

}

1 Ответ

0 голосов
/ 07 декабря 2010

Одним из способов является использование счетчика в функции WriteLogData () int nCounter, передавая его в GetFileName ().Когда вы создаете имя файла, вы можете добавить счетчик следующим образом:

sprintf(ctemp,"%s_%d",m_sFName.data(), nCounter);

Теперь у вас есть свои 1, 2, ...

Теперь ваш WriteLogData () должен быть таким:

long CNDSLog::WriteLogData(char *logData, long lDataSize)
    {

in nCounter = 1; // or whatever
if (m_File == NULL)
{
    GetFileName(nCounter);
    OpenNewFile();
}
else
{
    long lFileSize = GetFileSize(m_sFileName);
    if (lFileSize > m_lFileSize)
    {
        nCounter++;
        CloseNewFile(); 
        GetFileName(nCounter);
        OpenNewFile();
    }
}

WriteData(logData);

return ERR_NONE;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...