В настоящее время я использую GetFileSizeEx для отслеживания размера файлов журнала, прежде чем писать в него. У нас ограниченное пространство, и если мы пытаемся создать файл размером более 100 мегабайт, мы прекращаем регистрировать данные. Проблема в том, что GetFileSizeEx по какой-то причине повредит дескриптор файла, который я использую.
if( hFileHandle != INVALID_HANDLE_VALUE && hFileHandle != NULL )
{
asDbgMsg = asDbgMsg + asDelimeter;
dwBytesToWrite =asDbgMsg.Length();
pWrtBuffer = asDbgMsg.c_str();
// Get the file size we are about to write to.
PLARGE_INTEGER lpFileSize;
GetFileSizeEx(hFileHandle, lpFileSize);
// Don't write out the file if it is more than 100 mb!
if(lpFileSize->QuadPart < 104857600)
{
WriteFile( hFileHandle, pWrtBuffer, dwBytesToWrite, &dwBytesWritten, NULL );
}
}
hFileHandle перейдет от нормального значения (00000EB8) к ???? в отладчике студии Rad.
Теперь я решил эту проблему, используя вместо этого функцию GetFileSize:
if( hFileHandle != INVALID_HANDLE_VALUE && hFileHandle != NULL )
{
asDbgMsg = asDbgMsg + asDelimeter;
dwBytesToWrite =asDbgMsg.Length();
pWrtBuffer = asDbgMsg.c_str();
// Get the file size we are about to write too.
DWORD test;
GetFileSize(hFileHandle, &test);
// Don't write out the file if it is more than 100 mb!
if(test < 104857600)
{
WriteFile( hFileHandle, pWrtBuffer, dwBytesToWrite, &dwBytesWritten, NULL );
}
}
Однако я бы предпочел не использовать нерасширенную функцию. Я удалил файл, чтобы убедиться, что ни у какого другого процесса нет блокировки, но у него все еще есть проблема при создании файла. Должен отметить, что эта ошибка не возникает при сборке 6, только в Rad Studio 2010.
Спасибо за помощь.