Использование File Mapping для чтения данных из файла

0

Я хочу прочитать данные из файла (.txt) и нажать в поле "Редактировать". Я пишу C++ с чистым API.

HANDLE hFile;
HANDLE hMapFile;
LPVOID pMemory;

а также

case IDM_OPEN:
            hFile = CreateFile((LPCWSTR)szFileName, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, 0, OPEN_EXISTING, FILE_ATTRIBUTE_ARCHIVE, NULL);
            hMapFile = CreateFileMapping(hFile, NULL, PAGE_READONLY, 0, 0, NULL);
            pMemory = MapViewOfFile(hMapFile, FILE_MAP_READ | FILE_MAP_WRITE, 0,0,0);
            FileSize = GetFileSize(hFile, NULL);
            SendMessage(hWndEdit, WM_SETTEXT, 0, (LPARAM)(LPCWSTR)pMemory);
            MessageBox(hWnd, (LPCWSTR)pMemory, L"Caption", MB_OK);
            UnmapViewOfFile(pMemory);
            CloseHandle(hMapFile);
            CloseHandle(hFile);
            break;

Результат: Пусто, ничего в поле редактирования

Я ищу какую-то страницу, но не решил.

Когда я пытаюсь выполнить отладку с помощью точки останова, как этот образ:

http://i8.upanh.com/2013/1103/02//57993893.untitled.png

(Извините, я не могу опубликовать изображение)

hFile 0xffffffff, поэтому я думаю, что ошибка CreateFile, но я не понимаю !!

Пожалуйста, помогите мне решить эту проблему. Благодаря !!!

  • 1
    На какой линии происходит сбой? Каковы результаты CreateFile, CreateFileMapping и MapViewOfFile. Вероятно, что один из них терпит неудачу. Вы должны проверить там возвращаемые значения для ошибок в вашем коде.
  • 0
    И вам лучше надеяться, что в этом файле есть завершающий NUL-символ (в чем я сейчас сомневаюсь).
Показать ещё 2 комментария
Теги:

1 ответ

1
Лучший ответ
hFile = CreateFile((LPCWSTR)szFileName,....

Почему бросок в LPCWSTR? Если вам нужен этот бросок, вы делаете что-то неправильно. Изучите каждый шаг с помощью отладчика, чтобы узнать больше о том, что не так.

  • 0
    +1 Я также подозреваю, что это компилируется с включенными настройками Unicode, и szFileName является буфером char , с вышеупомянутым приведением, пытающимся исправить проблему. Кроме того, сам файл, скорее всего, также имеет узкие символы, то есть, даже если OP исправляет это, у них есть другая, столь же раздражающая проблема.
  • 0
    @ ScottMcP-MVP: Благодаря вашей рекомендации я отредактировал: wchar_t * szFileName = 0; szFileName = L "abc.txt"; hFile = CreateFile (szFileName, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, 0, OPEN_EXISTING, FILE_ATTRIBUTE_ARCHIVE, NULL); Но значение hFile в отладчике при выполнении этой строки по-прежнему: 0xffffffff. Какая ошибка ???
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню