C ++, функция, которая загружает текст, игнорирует последние несколько строк только с некоторыми файлами .txt - PullRequest
3 голосов
/ 12 декабря 2010

Я следую руководству по Forger Win API для загрузки текстовых файлов в элемент управления редактирования.Иногда весь файл загружается правильно, а иногда последняя часть не указывается, где «часть» в одном случае 2 с половиной строки, а в другом 10 строк o_O Вот как выглядят файлы:

(Я новый пользователь, поэтому он не позволяет мне публиковать более одной гиперссылки, поэтому вот галерея, где скриншоты: http://nancy.imgur.com/all/, и я имею в виду порядок, в котором они появляются в галерее)

2.5 пропущенных строк: секунда (чтение прекращается у курсора после 'F')

10 пропущенных строк: четвертый (также останавливается у курсора после f)

Прочитайте полностью: первый и третий

Вместо этого я попытался использовать fstreams, и тот же материал был пропущен (я также не мог заставить символы новой строки отображаться в элементе управления edit = ().быть неправым?

Я не мог связать с учебником Forger, поэтому вот функция:

BOOL LoadTextFileToEdit(HWND hEdit, LPCTSTR pszFileName) {
HANDLE hFile;
BOOL bSuccess = FALSE;

hFile = CreateFile(pszFileName, GENERIC_READ, FILE_SHARE_READ, NULL,
    OPEN_EXISTING, 0, NULL);
if(hFile != INVALID_HANDLE_VALUE)
{
    DWORD dwFileSize;

    dwFileSize = GetFileSize(hFile, NULL);
    if(dwFileSize != 0xFFFFFFFF)
    {
        LPSTR pszFileText;

        pszFileText = GlobalAlloc(GPTR, dwFileSize + 1);
        if(pszFileText != NULL)
        {
            DWORD dwRead;

            if(ReadFile(hFile, pszFileText, dwFileSize, &dwRead, NULL))
            {
                pszFileText[dwFileSize] = 0; // Add null terminator
                if(SetWindowText(hEdit, pszFileText))
                    bSuccess = TRUE; // It worked!
            }
            GlobalFree(pszFileText);
        }
    }
    CloseHandle(hFile);
}
return bSuccess; }

Ответы [ 3 ]

1 голос
/ 12 декабря 2010

Возможно ли, что ваш текстовый файл содержит встроенные NUL-символы, и поэтому строка pszFileText завершается раньше, чем вы ожидаете?Функция SetWindowText() прекращает чтение после того, как встретит первый терминатор NUL.

Кроме того, при чтении из файла вы захотите проверить, действительно ли dwRead - это количество байтов, которое вы хотели прочитать.Что произойдет, если dwRead меньше dwFileSize?

0 голосов
/ 12 декабря 2010

Могут быть ограничения на управление редактированием. По умолчанию объем текста, который пользователь может ввести в элемент управления редактирования, ограничен 32 КБ. Каков размер ваших текстовых файлов?

0 голосов
/ 12 декабря 2010

Прямо перед вызовом SetWindowText позвоните strlen(pszFileText) и сравните это с dwFileSize.Возможно, в файле было \0.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...