编译发布版本后,我的应用程序开始表现得很奇怪

时间:2011-02-16 09:01:32

标签: c windows visual-studio-2010

我在Visual Studio 2010 Express中创建了一个应用程序。首先我编译了一个调试版本,它完全可以工作,但在编译发布版本后它会冻结 我的申请应该是这样的:
我已经将BIOS版本收集到所有桌面,它将自动更新BIOS版本。它们位于网络共享中,例如\ myserver \ bios_update。 \\ myserver \ bios_update \ Log中还有一个Log文件夹。我的应用程序将通过以下方式在此日志文件夹中创建一个日志文件:\\ myserver \ bios_update \ log \ OptiPlex 780 \ hostname.txt当然OptiPlex 780是PC的模型类型,如果它不存在,它将因为有许多PC模型类型而被创建。如果hostname.txt(主机名被计算机主机名替换)不存在,则也会创建它。

有趣的是,目前它工作正常,但在编译发布版本后,我的应用程序采用以下方式。如果hostname.txt存在,那么它工作正常,但如果没有,那么它将冻结。它就像是在无限循环,但我不知道为什么(我打印了一些数据,我知道这就是为什么我说无限循环)。

我注意到以下事项: 这将是我的应用程序冻结:if(folderexists(LogFolder)) LogFolder包含一个类似\\ myserver \ bios_update \ Log \的路径 如果hostname.txt不存在,我的应用程序将冻结,但如果它存在,那就没关系。另外如果我给LogFolder没有最后的\ like \ myserver \ bios_update \ Log那么它也没关系。 这是我的代码:

bool folderexists( char * foldername )
{
if ( _access( foldername, 0 ) == 0 )
  { 
    struct stat status;
    stat( foldername, &status );

    if ( status.st_mode & S_IFDIR )
    {           
        //cout << "\nThe directory exists." << endl;
        return true;
    }
    else
    {
        //cout << "\nThe path you entered is a file." << endl;
        WriteToLog( "The path you entered is a file??????????????????", false );
        return false;
    }
}
else
{
    //cout << "\nPath doesn't exist." << endl;
    return false;
}
}//folderexists


void WriteToLog( char * text, bool star )
{
char time[ SMALL ], LogModel[ MEDIUM ], Day[ SMALL ], Month[ SMALL ];
FILE *logfile;

memset( time, 0, sizeof( time ) );
memset( Day, 0, sizeof( Day ) );
memset( Month, 0, sizeof( Month ) );

SYSTEMTIME lt;

GetLocalTime( &lt );

GetDayAndMonth( lt.wDayOfWeek , Day, lt.wMonth, Month );

sprintf( time, "[%s %s %d %02d:%02d:%02d]", Day, Month, lt.wDay, lt.wHour, lt.wMinute, lt.wSecond );

//printf("\nThe local time is: %02d:%02d\n", lt.wHour, lt.wMinute);

if ( !file_exists( LogFile ) )
{
    memset( LogModel, 0, sizeof( LogModel ) );
    strcpy( LogModel, LogFolder );
    strcat( LogModel, PCModel );

    if ( folderexists( LogFolder ) ) <== Here is where my App freeze!!!!!!!
    {
        if ( !folderexists( LogModel ) )
        {
            if ( !CreateDirectoryA( LogModel, NULL ) ) ShowError( "CreateDirectoryA .............................. Failed! ( creating LogModel folder ) ", true, true );
        }
    }
    else
    {
        printf( "\nLogFolder isn't reachable!" ); 
        exit(-1);
    }
}//file_exists

if ( ( logfile = fopen( LogFile, "a" ) ) == NULL ) 
{
    ShowError( "Failed to create Logfile!", false, true );
}
else 
{
    fputs( time, logfile );
    fputs( " - ", logfile );
    fputs( text, logfile );
    fputs( "\n", logfile );
    if ( star ) fputs( "**********************************************************************************************************************\n", logfile );

    fclose( logfile );

    //if ( star ) exit( -1 );
}
}//WriteToLog

任何建议都是适当的,因为它让我发疯,我无法弄明白,问题是什么。

1 个答案:

答案 0 :(得分:1)

它以递归方式调用自己。在FolderExists中调用WriteToLog,如果调用WriteToLog的FolderExists调用,如果调用WriteToLog的FolderExists调用,则调用调用WriteToLog调用的FolderExists调用的文件,如果FolderExists调用WriteToLog,则调用,如果调用FolderExists调用,则调用如果调用FolderExors调用,则调用FolderExists调用的文件,如果FolderExists调用WriteToLog调用,则调用的文件,如果FolderExists调用WriteExo调用,则调用,如果调用WriteToLog等的FolderExists