C++ ifstream未从getopenfilename打开文件名

C++ ifstream未从getopenfilename打开文件名,c++,winapi,fstream,C++,Winapi,Fstream,这里是业余程序员。我今天的问题是,我试图加载一个.txt文件,以显示在对话框的编辑框中 在我开始编写代码之前:我可以通过指定文件位置并绕过getopenfilename中的加载对话框来让它工作,并且工作得很顺利。但是当我从getopenfilename获取文件位置时,我似乎无法使用它 有关守则如下: ZeroMemory(&ofn, sizeof(ofn)); ofn.lStructSize = sizeof(ofn); ofn.hwndOwner = hDlg; ofn.lpstrFi

这里是业余程序员。我今天的问题是,我试图加载一个.txt文件,以显示在对话框的编辑框中

在我开始编写代码之前:我可以通过指定文件位置并绕过getopenfilename中的加载对话框来让它工作,并且工作得很顺利。但是当我从getopenfilename获取文件位置时,我似乎无法使用它

有关守则如下:

ZeroMemory(&ofn, sizeof(ofn));
ofn.lStructSize = sizeof(ofn);
ofn.hwndOwner = hDlg;
ofn.lpstrFile = szFile;

ofn.lpstrFile[0] = '\0';
ofn.nMaxFile = sizeof(szFile);
ofn.lpstrFilter = "All\0*.*\0Text\0*.TXT\0";
ofn.nFilterIndex = 1;
ofn.lpstrFileTitle = NULL;
ofn.nMaxFileTitle = 0;
ofn.lpstrInitialDir = NULL;
ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST;
if (GetOpenFileName(&ofn) == TRUE)
{
    hf = CreateFile(ofn.lpstrFile, GENERIC_READ, 0, LPSECURITY_ATTRIBUTES)NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED, (HANDLE)NULL);

    ifstream inFile(ofn.lpstrFile);

    if (!inFile)
        MessageBox(0, "CAN'T OPEN FILE", "ALERT", MB_OK | MB_ICONWARNING);
    else
    {
        string text;
        while(getline(inFile, text));
        inFile.close();

        MessageBox(0, text.c_str(), "msg", MB_OK);
        SetWindowText(editbox, text.c_str());
    }
    CloseHandle(hf);
    hf = INVALID_HANDLE_VALUE;
我是一个新手,但我一直在绞尽脑汁和我的谷歌栏试图弄明白这一点


它永远不会通过fstream打开。

问题的根源是您试图使用Win32 API CreateFile和标准库std::ifstream打开该文件

通过查看CreateFile调用和,可以看到您正在将0传递给dwShareMode参数,其描述说明:

如果此参数为零且CreateFile成功,则无法共享该文件或设备,并且在关闭该文件或设备的句柄之前无法再次打开该文件或设备

但是,在该调用之后,您继续尝试通过std::ifstream打开该文件,由于上述原因,该操作失败,并且您只检查ifstream是否成功打开该文件


< >如果只使用CeaFeFLILE或STD::IFFSTATE,而不是两者都可以避免这个问题。

为什么您尝试使用Win32 API和C++标准库打开文件?我似乎无法工作。和到底是什么问题?除了最初的问题外,您在读取文件的方式上也有一个缺陷。您将只显示文件的最后一行,因为每次getline调用都将覆盖文本变量的内容。你把两个独立的方面混合在一起。您的问题是打开一个文件。你不需要一个对话来调查这个问题。孤立问题。看看打开文件的代码。