テキスト ファイルを 1 行ずつ読み取り、現在の位置 m_numBytesRead を保存するコードを次に示します。そのため、ループを中断し (大きなファイルのチャンクでテキスト解析を分割する場合)、m_numBytesRead-1 の Seek を作成して 2 回目にアクセスしようとすると、ReadString は期待どおりに行の先頭を取得しません。 .
CStdioFile fileLog;
if (fileLog.Open(m_strReadFileName, CFile::modeNoTruncate | CFile::modeRead | CFile::shareDenyNone))
{
if (m_numBytesRead > 0)
fileLog.CStdioFile::Seek(m_numBytesRead-1, CFile::begin);
bool bBreakLoop = false;
while (fileLog.ReadString(strLine) && !bBreakLoop)
{
// any condition to set bBreakLoop after few MB read...
if (!bBreakLoop)
{
m_numBytesRead = fileLog.CStdioFile::GetPosition();
}
};
fileLog.Close();
}
詳細にデバッグし、Notepad ++ で取得したインデックスと比較すると、CStdioFile::GetPosition() が正しい値を与えていないようで、新しい行の先頭が読み取られますが、数バイト (私の場合は 12) 以上です。 ..
MFC のバグですか、それとも何か不足していますか? 誰かが同様の問題を見ていますか?
Windows 7 で VS2010 を使用していることに注意してください。