C++ 如何在设备上保存/加载信息?

C++ 如何在设备上保存/加载信息?,c++,wxwidgets,C++,Wxwidgets,我正在开发一个应用程序,但我需要它将其信息保存到计算机上,并在下次打开时从那里加载 举一个最简单的例子:我有一个字符串数组,我想将它们保存为应用程序目录中的*.txt文件。数组的每个成员都应该位于文件的新行上。 我想在打开应用程序时将文件的条目加载到数组中,或者创建一个空的*.txt文件(如果不存在) 注意:如果有更简单的方法,而不是将它们保存到*.txt中,请告诉我。将它们严格保存为*.txt格式不是强制性的 此外,我正在为我的应用程序使用wxWidgets,如果这能让它变得更简单的话。Mai

我正在开发一个应用程序,但我需要它将其信息保存到计算机上,并在下次打开时从那里加载

举一个最简单的例子:我有一个字符串数组,我想将它们保存为应用程序目录中的*.txt文件。数组的每个成员都应该位于文件的新行上。 我想在打开应用程序时将文件的条目加载到数组中,或者创建一个空的*.txt文件(如果不存在)

注意:如果有更简单的方法,而不是将它们保存到*.txt中,请告诉我。将它们严格保存为*.txt格式不是强制性的

此外,我正在为我的应用程序使用wxWidgets,如果这能让它变得更简单的话。

MainFrame::MainFrame(){
MainFrame::MainFrame() {
    wxFileName f(wxStandardPaths::Get().GetExecutablePath());
    wxString appPath(f.GetPath());

    std::ifstream inputFileStream;
    inputFileStream.open(std::string(appPath.mb_str(wxConvUTF8)) + "data.txt");
    std::string data;
    inputFileStream >> data;
}
MainFrame::~MainFrame()
{
    wxFileName f(wxStandardPaths::Get().GetExecutablePath());
    wxString appPath(f.GetPath());

    std::ofstream outputFileStream;
    outputFileStream.open(std::string(appPath.mb_str(wxConvUTF8)) + "data.txt");
    std::string data = "something";
    outputFileStream << data;
    outputFileStream.close();
}
wxFileName f(wxStandardPaths::Get().GetExecutablePath()); wxString appPath(f.GetPath()); std::ifstream输入文件流; open(std::string(appPath.mb_str(wxConvUTF8))+“data.txt”); std::字符串数据; 输入文件流>>数据; } 大型机::~大型机() { wxFileName f(wxStandardPaths::Get().GetExecutablePath()); wxString appPath(f.GetPath()); std::流输出文件流; open(std::string(appPath.mb_str(wxConvUTF8))+“data.txt”); std::string data=“something”;
outputFileStream您正在保存什么样的信息?某种配置?窗口/控件的位置/大小?应用程序数据?我正在那里保存列表框的成员。用户可以将成员添加到此列表中(或者,在我弄清楚如何保存/加载这些字符串后,就可以添加成员)请重新阅读我的问题,然后给出正确的答案。再来一次-你想保存什么样的信息-应用程序数据或某种配置?我猜是应用程序数据。你是开发人员,所以你应该知道使用了什么样的数据。;-)现在回答问题-你可以使用SQLite保存应用程序数据然后使用<代码>选择…./Cuth>查询来检索它。你可以使用标准的C++流类来保存字符串到磁盘然后读取它。在Web上有很多例子,在这里,如果它实际上是你的应用程序的一些配置数据,那么,请查看代码< > WXCONFIG/<代码>文档。这是有效的,但是我我认为代码本身过于复杂。我实现它的方法是使用“std::ifstream input(“data.txt”);std::string str;std::getline(input,str);”将我的输入转换为单个字符串,然后我可以使用算法将其分解为数组。我使用“std::ofstream output(“data.txt”);”我不知道你建议的版本和我最终使用的版本在功能上是否有任何区别。我认为当使用某个框架时,你应该主要使用框架的解决方案(类和方法)。此外,这些方法与wxWidgets+UTF-8中的wxString和其他内容兼容。当然,如果您不使用UTF-8,并且觉得这过于复杂,请使用标准库。您肯定不想将用户数据保存到可执行路径。请改用
GetDocumentsDir()
。也可以使用
.mb_str(wxConvUTF8)
是错误的,因为路径在例如Windows上不在UTF-8中;因此,如果路径实际上包含任何非ASCII,它将不起作用。使用
wxString path=f.GetPath()+“data.txt”
打开(path.fn_str())更有可能按预期的方式工作。@ USE123,这些类是在C++没有STL时生成的。现在在XXI世纪,建议使用C++ + STL类。WX替代品只用于向后兼容。