У меня есть следующий код, где идея состоит в том, чтобы прочитать текстовый файл построчно и сохранить текущую позицию m_numBytesRead. Так что, если я прерываю цикл (в моем случае, чтобы разбить текст на парсинг больших файлов) и пытаюсь получить доступ во второй раз, выполняя поиск m_numBytesRead-1, 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 или я что-то там пропускаю? Кто-то видит похожие проблемы?
Обратите внимание, что я использую VS2010 на Windows 7.
Добавить открытый режим CFile::typeBinary
чтобы получить точные байтовые смещения. Режим по умолчанию — текст, который выполняет преобразование новой строки, которое может испортить смещения.
Других решений пока нет …