После компиляции релизной версии мое приложение начинает работать странно - PullRequest
1 голос
/ 16 февраля 2011

Я сделал заявку в Visual Studio 2010 Express.Сначала я скомпилировал отладочную версию, и она работала безупречно, но после компиляции релизной версии он зависает.
Мое приложение должно работать следующим образом:
Я собрал версию BIOS для всех десктопов и автоматически обновит BIOSверсии.Они расположены на сетевом ресурсе, как \ myserver \ bios_update.Также есть папка Log в \\ myserver \ bios_update \ Log.Мое приложение создаст файл журнала в этой папке журнала следующим образом: \\ myserver \ bios_update \ log \ OptiPlex 780 \ hostname.txt Конечно, OptiPlex 780 - это тип модели ПК, и если он не существует, он будетбыть создан, потому что есть много типов моделей ПК.Если 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 Ответ

1 голос
/ 16 февраля 2011

Это вызывает себя рекурсивно. В FolderExists вы вызываете WriteToLog, который вызывает, если FolderExists, который вызывает WriteToLog, который вызывает, если FolderExists, который вызывает WriteToLog, который вызывает, если FolderExists, который вызывает WriteToLog, вызывает FolderExists, который вызывает WriteToLog .... и т. Д.

...