目前我正在使用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 studio的调试器中。
现在我通过使用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。
感谢您的帮助。
答案 0 :(得分:2)
尝试使用LARGE_INTEGER而不是PLARGE_INTEGER。通常PLARGE_INTEGER是指针,而不是值。