创建多个 txt 文件以在 c++ 中存储数据

Creating multiple txt files to store data in c++

本文关键字:c++ 存储 数据 txt 文件 创建      更新时间:2023-10-16

我有一个对象数组,每个对象都有一些数据成员。我想做的只是为每个对象创建一个文件来存储数据。这可能吗?例如,我有一个包含 10 个对象的数组,第一个对象的数据必须存储在 data01 中.txt第二个对象的数据必须存储在 data02 中.txt等等(不需要示例中使用的文件名格式,任何文件名都可以)。提前谢谢。

你只需要编写一个函数:

std::string serializeObject(const XClass &object);

它将对象的数据表示为字符串。然后例行将序列化对象写入文件:

std::ofstream outFile;
for (...
    outFile.open(sFileName);
    outFile << serializeObject(..

你的问题有点缺乏细节,但我假设你想将数组中的类对象保存到磁盘。

如果这种理解是正确的,那么解决方案似乎并不难。

我建议使用 boost::serialize 将类保存到磁盘 (http://www.boost.org/doc/libs/1_54_0/libs/serialization/doc/index.html)

至于您的迭代过程,这里有一个可能会有所帮助的示例:

#include <string>
#include <vector>
#include <boost/shared_ptr.hpp>
#include <boost/scoped_array.hpp>
class PrettyPetunia
{
public:
    PrettyPetunia(){;}
    ~PrettyPetunia(){;}
private:
    std::string _myName;
};
typedef boost::shared_ptr<PrettyPetunia> PrettyPetuniaPtr;
typedef std::vector<PrettyPetuniaPtr>    PrettyPetunias;
typedef PrettyPetunias::iterator         PrettyPetuniasItr;
void SaveClassObjectOutToDisk(const char* fileName, PrettyPetuniaPtr classObjectToSave);
void IterateArrayToSaveToDisk(PrettyPetunias& petunias)
{
    unsigned int loopCounter = 0;
    for (PrettyPetuniasItr itr = petunias.begin(); itr != petunias.end(); ++itr )
    {
        boost::scoped_array<char> fileName ( new char[1024] ); // 1024 or PATH_MAX, your choice
        sprintf(fileName.get(), "data%d02.txt", loopCounter);
        PrettyPetuniaPtr ptr = (*itr);
        SaveClassObjectOutToDisk(fileName.get(), (*itr) );
    }
}

void SaveClassObjectOutToDisk(const char* fileName, PrettyPetuniaPtr classObjectToSave)
{
    // ...
}

如果您有兴趣将 there 文件用于各种 Web 应用程序,您可以使用 JSON 格式:http://en.wikipedia.org/wiki/Json

{"menu": {
  "id": "file",
  "value": "File",
  "popup": {
    "menuitem": [
      {"value": "New", "onclick": "CreateNewDoc()"},
      {"value": "Open", "onclick": "OpenDoc()"},
      {"value": "Close", "onclick": "CloseDoc()"}
    ]
  }
}}

Boost和Poco都可以处理这种格式的敌人示例。