Цитата(SALLIblk @ 5.6.2013, 19:34 ) | char buf[1000]; ... void GetOpenFileName() { static TCHAR szFileName[256] = _T("");; static OPENFILENAME OpenFileName; static OPENFILENAME ofn; ZeroMemory(&ofn, sizeof(OPENFILENAME)); ofn.lStructSize = sizeof(OPENFILENAME); ofn.hInstance = hInst; ofn.lpstrFilter = _T("Выбери текстовый документ .txt\0*.txt\0\0"); ofn.lpstrTitle = NULL; ofn.lpstrFile = szFileName; ofn.nMaxFile = sizeof(szFileName); ofn.Flags = OFN_EXPLORER|OFN_FILEMUSTEXIST|OFN_PATHMUSTEXIST; if(GetOpenFileName(&ofn)) { sprintf(buf, "\%s", szFileName); MessageBox(0, (LPCWSTR)szFileName, L" ", MB_OK); } } ... LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { static HWND hEdit, hEdit1, hButton, hButton1, hListBox;
switch (message) { ... case WM_COMMAND: switch (LOWORD(wParam)) { case ID_BUTTON: GetOpenFileName(); hFile = CreateFile((LPCWSTR)buf,GENERIC_READ, FILE_SHARE_READ,NULL, OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL); BufSize = GetFileSize(hFile, NULL); Buffer = new char[BufSize]; ReadFile(hFile,Buffer,BufSize,&dwBytes,NULL); CloseHandle(hFile); SetWindowTextA(hEdit,Buffer); UpdateWindow(hEdit); break; } break; ... }
|
Ну и как в buf (который в CreateFile) попадёт имя файла из static TCHAR szFileName[256] (которая в GetOpenFileName()):
Цитата(SALLIblk @ 5.6.2013, 19:34 ) | sprintf(buf, "\%s", szFileName);
|
Во-первых, зачем там слеш? Во-вторых, в юникоде sprintf правильно не отработает...
А если пользователь в GetOpenFileName "Cancel" нажмёт? Файл всё равно будет открыт?
Цитата(SALLIblk @ 5.6.2013, 19:34 ) | ofn.nMaxFile = sizeof(szFileName);
|
Здесь нужен размер не в байтах, а в символах...
Что за безумное смешение char *, L"", TCHAR *? |