2013-11-03 3 views
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. Вполне вероятно, что один из них потерпел неудачу. Вы должны проверить там возвращаемые значения для ошибок в вашем коде. – shf301

+0

И вам лучше надеяться, что файл имеет завершающий NUL-char (который я сомневаюсь на этом этапе). – WhozCraig

+1

Из документации 'CreateFile':' Если функция не работает, возвращаемое значение INVALID_HANDLE_VALUE. Чтобы получить расширенную информацию об ошибке, вызовите GetLastError.' –

ответ

1
hFile = CreateFile((LPCWSTR)szFileName,.... 

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

+0

+1 Я также подозреваю, что это скомпилировано с включенными настройками Unicode, а 'szFileName' является буфером' char', причем вышеупомянутый приказ пытается исправить проблему. Кроме того, сам файл весьма вероятен и узкими символами, что означает, что даже если ОР исправляет это, у них есть еще одна столь же раздражающая проблема. – WhozCraig

+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. Какая ошибка ??? – cristiano

+0

@ ThùyDương: вам нужно вызвать 'GetLastError()', чтобы узнать, почему он терпит неудачу. Скорее всего, либо файл не существует нигде в текущем пути поиска (поскольку вы указываете ** относительный ** путь к файлу .txt), либо файл уже открыт чем-то другим и не предоставляет доступ к файл. –

Смежные вопросы