C 编译发布版本后,我的应用程序开始运行异常

C 编译发布版本后,我的应用程序开始运行异常,c,windows,visual-studio-2010,C,Windows,Visual Studio 2010,我在VisualStudio2010Express中提出了一个应用程序。首先,我编译了一个调试版本,它工作得非常完美,但在编译了发布版本之后,它就冻结了。 我的应用程序应该是这样工作的: 我已将BIOS版本收集到所有桌面,它将自动更新BIOS版本。它们位于网络共享上,如\myserver\bios\u update。\\myserver\bios\u update\Log中还有一个日志文件夹。我的应用程序将按以下方式在此日志文件夹中创建日志文件:\\myserver\bios\u update\

我在VisualStudio2010Express中提出了一个应用程序。首先,我编译了一个调试版本,它工作得非常完美,但在编译了发布版本之后,它就冻结了。
我的应用程序应该是这样工作的:
我已将BIOS版本收集到所有桌面,它将自动更新BIOS版本。它们位于网络共享上,如\myserver\bios\u update。\\myserver\bios\u update\Log中还有一个日志文件夹。我的应用程序将按以下方式在此日志文件夹中创建日志文件:\\myserver\bios\u update\log\OptiPlex 780\hostname.txt当然OptiPlex 780是电脑的型号,如果它不存在,将创建它,因为有许多电脑型号。如果hostname.txt(主机名被计算机主机名替换)不存在,则也将创建它

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

我注意到以下几点: 我的应用程序将冻结:if(folderexists(LogFolder)) LogFolder包含一个类似\\myserver\bios\u update\Log\ 如果hostname.txt不存在,我的应用程序将冻结,但如果它存在,则可以。另外,如果我给LogFolder时没有最后一个\like\myserver\bios\u 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
bool folderexists(char*foldername)
{
if(_访问(foldername,0)==0)
{ 
结构状态;
状态(文件夹名称和状态);
if(status.st_mode&S_IFDIR)
{           

//在FolderExists中,你调用WriteToLog调用if FolderExists调用WriteToLog调用if FolderExists调用WriteToLog调用if FolderExists调用WriteToLog调用if FolderExists调用WriteToLog调用if FolderExists调用WriteToLog调用if FolderExistsFolderExists调用WriteToLog调用if FolderExists调用WriteToLog…等

它是递归调用自己。在FolderExists中,你调用WriteToLog调用if FolderExists,它调用WriteToLog,它调用if FolderExists,它调用WriteToLog,它调用if FolderExists,它调用WriteToLog,它调用if FolderExistsxists调用WriteToLog调用if FolderExists调用WriteToLog调用if FolderExists调用WriteToLog调用if FolderExists调用WriteToLog…等等

该死!你是对的!我怎么会错过这个?但这只是我问题的一部分。我不明白,为什么它在调试版本中工作,为什么我会这样做在发布版本中不起作用?如果我给LogFolder一个\结尾,它将找不到driectory,但在Bug版本中它找到了。@kampi我希望你不要问关于调试/发布差异的问题:)我不是C/C++的人,所以我不知道发布和调试将如何改变这种行为:)但我快疯了olderexists几乎每次都返回“您输入的路径是一个文件”,我不知道为什么:(可能是sprintf或cout FolderExists中的foldername来查看它是如何连接的。您是否100%确定所有***&*都在正确的位置?:-)@rene是的,我是:)在我编译调试之前,一切都正常,因此必须处处正确。我在folderexists中打印目录名,但如果hostname.txt不存在,folderexists将返回false,因为“您输入的路径是一个文件”。也许我应该寻找另一种方法来检查文件夹是否存在?该死!你是对的!我怎么会错过这个?但这只是我问题的一部分。我不明白,为什么它在调试版本中工作,为什么在发布版本中不工作?如果我给LogFolder一个\结尾,它将找不到驱动器,但在它找到的bug版本。@kampi我希望你不要问关于调试/发布差异的问题:)我不是C/C++的人,所以我不知道发布和调试会如何改变这种行为:)但我快疯了。Folderexists几乎每次都返回“你输入的路径是一个文件”,我不知道为什么:(可能是sprintf或FolderExists中的foldername来查看它是如何连接的。您是否100%确定所有***&*都在正确的位置?:-)@rene是的,我是:)在我编译调试之前,一切都正常,因此它必须处处正确。我在folderexists中打印目录名,但如果hostname.txt不存在,folderexists将返回false,因为“您输入的路径是一个文件”。也许我应该寻找另一种方法来检查文件夹是否存在?