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

时间:2013-09-29 12:53:53

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

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

3 个答案:

答案 0 :(得分:2)

你必须只编写一个函数:

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

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

std::ofstream outFile;

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

答案 1 :(得分:1)

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

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

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

答案 2 :(得分:1)

如果您对将该文件用于各种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()"}
    ]
  }
}}

BoostPoco都可以处理这种格式的例子。