【问题标题】:Creating multiple txt files to store data in c++在 C++ 中创建多个 txt 文件来存储数据
【发布时间】:2013-09-29 12:53:53
【问题描述】:

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

【问题讨论】:

  • 序列化是关键字。您应该定义该对象在文本文件中的表示方式。

标签: c++ c file visual-c++ file-handling


【解决方案1】:

你只需要写一个函数:

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

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

std::ofstream outFile;

for (...
    outFile.open(sFileName);
    outFile << serializeObject(..

【讨论】:

    【解决方案2】:

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

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

    我建议使用 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)
    {
        // ...
    }
    

    【讨论】:

      【解决方案3】:

      如果您有兴趣将该文件用于各种 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 都可以处理这种格式的敌人示例。

      【讨论】:

        猜你喜欢
        • 2018-05-06
        • 1970-01-01
        • 2010-12-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-01-17
        • 1970-01-01
        相关资源
        最近更新 更多