GetFileSizeExは、ファイルハンドルが破損します
-
26-09-2019 - |
質問
現在、私はそれに私の書き込みの前に取得する方法を大きなログファイルを追跡するためにGetFileSizeExを使用しています。我々はデータのロギングを停止百メガバイトを超えるファイルを作成しようとする私たちは、限られたスペースや何かを持っています。問題は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)から行くでしょう????ラッドスタジオのデバッガでます。
今、私が代わりに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年の下では起こらないことに注意する必要があります。
の助けをいただき、ありがとうございます。
解決
LARGE_INTEGERの代わりPLARGE_INTEGERを使用してみてください。通常PLARGE_INTEGERポインタ、ではない値です。
所属していません StackOverflow