繁体   English   中英

使用Create / ReadFile-C写入文件内容

[英]Writing contents of file using Create/ReadFile - C

我正在尝试使用公共对话框读取小文本文件的内容,将文件中的文本传递到缓冲区中,然后通过使窗口无效并强制重新绘制将其绘制为窗体。

除在屏幕上显示文本外,所有其他操作都正常,当我单击对话框上的“确定”按钮时,没有文本出现。

我是C的新手,所以我可能会错过关键字或使用了错误的指针。

到目前为止,这是我的代码段:

LRESULT CALLBACK WindowFunc(HWND hMainWindow, UINT message, 
                            WPARAM wParam, LPARAM lParam)
{
    CHAR fileText[1024];
    HDC hdc;
    OPENFILENAME ofn;
    TCHAR szFile[MAX_PATH];
    HANDLE fileHandle;
    RECT clientArea;
    PAINTSTRUCT pStruct;

    // Act on current message
    switch(message)    
    {
    case WM_CREATE:
        AddMenus(hMainWindow);
        break;

    case WM_COMMAND:


        switch(LOWORD(wParam))
        {
        case IDM_FILE_OPEN:

            ZeroMemory(&ofn, sizeof(ofn));
            ofn.lStructSize = sizeof(ofn);
            ofn.lpstrFile = szFile;
            ofn.lpstrFile[0] = '\0';
            ofn.hwndOwner = hMainWindow;
            ofn.nMaxFile = sizeof(szFile);
            ofn.lpstrFilter = TEXT("All files(*.*)\0*.*\0");
            ofn.nFilterIndex = 1;
            ofn.lpstrInitialDir = NULL;
            ofn.lpstrFileTitle = NULL;
            ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST;

            if(GetOpenFileName(&ofn))
            {
                fileHandle = CreateFile(&ofn.lpstrFile,GENERIC_READ,0,NULL,OPEN_EXISTING,0,NULL);
                ReadFile(fileHandle,fileText,1023,0,0);
                CloseHandle(fileHandle);
            }

            GetClientRect(hMainWindow, &clientArea);
            InvalidateRect(hMainWindow,
                            &clientArea,
                            TRUE
                            );          

            break;
        case IDM_FILE_QUIT:
            SendMessage(hMainWindow, WM_CLOSE, 0, 0);
            break;

        }
        break;

    case WM_PAINT:

        hdc = BeginPaint(hMainWindow, &pStruct);

        DrawTextA(hdc,
                fileText, 
                -1,
                &clientArea,
                DT_WORDBREAK);

        EndPaint(hMainWindow, &pStruct);

        break;

    case WM_DESTROY:

        PostQuitMessage(0);
        break;

    default:
        return DefWindowProc(hMainWindow, message, wParam, lParam);
    }
    return 0;
}

我到底哪里出问题了? 我也知道它的概念并不完美,因为我的目标是简单地使它起作用,然后再进行分解。

感谢您的时间。

CreateFile (W)的第一个参数的类型是LPCWSTR (常量WString)。

ofn.lpstrFileLPWSTR (WString)

因此&ofn.lpstrFile在您的代码中是错误的(是LPWSTR* )。

这: ReadFile(fileHandle,fileText,1023,0,0);

应该是: ReadFile(fileHandle, &fileText,1023,0,0);

使用char*而不是数组。 一个char指针基本上将指向数组中的第一项。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM