gpt4 book ai didi

c++ - 如何在MFC中显示文件的所有行

转载 作者:行者123 更新时间:2023-12-02 10:00:44 27 4
gpt4 key购买 nike

因此,正如标题所述,我想在编辑框中显示文件的所有内容,但我不知道该怎么做
这是按钮的处理程序,当按下它时,它将使用户选择一个文件,并且其内容应该出现在编辑框中。
问题是它只以某种方式显示第一行

UpdateData(TRUE);
CFileDialog Dlg(TRUE);
int iRet = Dlg.DoModal();
CString StrFileName = Dlg.GetPathName();

if (iRet == IDOK)
{
CStdioFile file;
file.Open(StrFileName, CFile::modeRead | CFile::typeText);

file.ReadString(m_strEditCtrl);
file.Close();
UpdateData(FALSE);
}

最佳答案

不要将MFC用于您的应用程序需求,仅将其用作UI。您的所有代码都应该以可移植的方式编写。恕我直言。
根据您的需要编写全局非MFC函数。因此,要从文件中获取字符串。

std::string read_file(const std::wstring& filepathname)
{
std::ifstream is(filepathname, std::ios::binary | std::ios::ate);
auto buf_size = is.tellg();
if (buf_size == -1)
return std::string();

std::string str;
str.resize(buf_size);
is.seekg(0, std::ios::beg);
is.read(str.data(), str.size());
return str;
}
现在,对于CEdit框的属性,如果要显示以 Multiline结尾的行,则必须将 \r\n设置为true。您可能还需要启用 Vertical ScrollHorizontal Scroll
创建一个 control variable并直接设置文本。您可以使用向导进行操作。使用 UpdateData几乎总是一个错误。它破坏了对话框中数据交换的目的。
因此,您已声明:
CEdit cEditCtrl;
您可以:
auto str = read_file("filename.txt");
cEditCtrl.SetWindowText(str.c_str());
现在,我就像设置了multi_byte而不是Unicode一样。我强烈建议您,如果未设置Uncode,请这样做。从经验来看,做起来要容易得多。在这种情况下,如果您读取ASCII文件,则将具有一些全局变量,例如:
inline std::wstring to_wide(const char* ps) { return std::wstring(boost::locale::conv::utf_to_utf<wchar_t>(ps)); }
inline std::wstring to_wide(const std::string& str) { return to_wide(str.c_str()); }
您可以使用std库而不是boost做到这一点。那么你就可以:
cEditCtrl.SetWindowText(to_wide(str).c_str());
我要补充一点,只要您编译Unicode,就可以省去该宏: _T("text"),而只需为文字编写 L"text"即可。

关于c++ - 如何在MFC中显示文件的所有行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62685583/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com