CStdioFile :: GetPosition для длинного файла (15 МБ) неверно на несколько байтов

У меня есть следующий код, где идея состоит в том, чтобы прочитать текстовый файл построчно и сохранить текущую позицию 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.

0

Решение

Добавить открытый режим CFile::typeBinary чтобы получить точные байтовые смещения. Режим по умолчанию — текст, который выполняет преобразование новой строки, которое может испортить смещения.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]