C++ 创建多个txt文件以将数据存储在c++;

C++ 创建多个txt文件以将数据存储在c++;,c++,c,file,visual-c++,file-handling,C++,C,File,Visual C++,File Handling,我有一个对象数组,每个对象都有一些数据成员。我只想为每个对象创建一个文件来存储数据。这可能吗?例如,我有一个10个对象的数组,第一个对象的数据必须存储在data01.txt中,第二个对象的数据必须存储在data02.txt中,等等(示例中使用的文件名格式不需要,任何文件名都可以)。提前感谢。您只需编写一个函数: std::string serializeObject(const XClass &object); 它将对象的数据表示为字符串。 然后定期将序列化对象写入文件: std::o

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

您只需编写一个函数:

std::string serializeObject(const XClass &object);
它将对象的数据表示为字符串。 然后定期将序列化对象写入文件:

std::ofstream outFile;

for (...
    outFile.open(sFileName);
    outFile << serializeObject(..
std::排液管;
对于(。。。
outFile.open(sFileName);

outFile您只需编写一个函数:

std::string serializeObject(const XClass &object);
它将对象的数据表示为字符串。 然后定期将序列化对象写入文件:

std::ofstream outFile;

for (...
    outFile.open(sFileName);
    outFile << serializeObject(..
std::排液管;
对于(。。。
outFile.open(sFileName);

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

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

我建议使用boost::serialize将类保存到磁盘()

对于您的迭代过程,以下是一个可能有帮助的示例:

#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)
{
    // ...
}
#包括
#包括
#包括
#包括
前突类
{
公众:
PrettyPetunia(){;}
~PrettyPetunia(){;}
私人:
std::string_myName;
};
typedef boost::shared_ptr pretypetuniaptr;
typedef std::向量PrettyPetunias;
typedef PrettyPetunias::迭代器PrettyPetuniasItr;
void SaveClassObjectOutToDisk(const char*fileName,PrettyPetuniaPtr classObjectToSave);
void iteratearlaytosavetodisk(前型突尼斯和矮牵牛花)
{
无符号整数循环计数器=0;
for(PrettyPetuniasItr itr=penunias.begin();itr!=penunias.end();+itr)
{
boost::作用域数组文件名(新字符[1024]);//1024或PATH_MAX,由您选择
sprintf(fileName.get(),“数据%d02.txt”,循环计数器);
PrettyPetuniaPtr ptr=(*itr);
SaveClassObjectOutToDisk(fileName.get(),(*itr));
}
}
void SaveClassObjectOutToDisk(const char*fileName,PrettyPetuniaPtr classObjectToSave)
{
// ...
}

您的问题有点不够详细,但我假设您希望将数组中的类对象保存到磁盘

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

我建议使用boost::serialize将类保存到磁盘()

对于您的迭代过程,以下是一个可能有帮助的示例:

#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)
{
    // ...
}
#包括
#包括
#包括
#包括
前突类
{
公众:
PrettyPetunia(){;}
~PrettyPetunia(){;}
私人:
std::string_myName;
};
typedef boost::shared_ptr pretypetuniaptr;
typedef std::向量PrettyPetunias;
typedef PrettyPetunias::迭代器PrettyPetuniasItr;
void SaveClassObjectOutToDisk(const char*fileName,PrettyPetuniaPtr classObjectToSave);
void iteratearlaytosavetodisk(前型突尼斯和矮牵牛花)
{
无符号整数循环计数器=0;
for(PrettyPetuniasItr itr=penunias.begin();itr!=penunias.end();+itr)
{
boost::作用域数组文件名(新字符[1024]);//1024或PATH_MAX,由您选择
sprintf(fileName.get(),“数据%d02.txt”,循环计数器);
PrettyPetuniaPtr ptr=(*itr);
SaveClassObjectOutToDisk(fileName.get(),(*itr));
}
}
void SaveClassObjectOutToDisk(const char*fileName,PrettyPetuniaPtr classObjectToSave)
{
// ...
}

如果您有兴趣将该文件用于各种web应用程序,可以使用JSON格式:


例如,两者都可以处理此格式。

如果您有兴趣将此文件用于各种web应用程序,可以使用JSON格式:


例如,两者都可以处理这种格式。

序列化是关键字。您应该定义如何在文本文件中表示该对象。序列化是关键字。您应该定义如何在文本文件中表示该对象。