写入/读取结构到/从文件

时间:2015-06-16 21:58:00

标签: c++ file struct stream

我对使用流和处理FileWriter有点新意。 这是我通过搜索示例/解决方案得到的:

struct vertex_info{
  QPointF pos;
  int type;
};


struct graph_info{
     vertex_info all_vertices[];
};



QDataStream &operator<<(QDataStream &out, const vertex_info &v){

    out << v.pos << v.type;
    return out;
}


QDataStream &operator<<(QDataStream &out, const graph_info &g){

   int n = sizeof(g.all_vertices);

   for(int i=0; i<n ;i++){
       out<<g.all_vertices[i];
   }

   return out;
 }




 QDataStream &operator>>(QDataStream &in, graph_info &g){
        //vertex_info vertex_array[];

       return in;
 }



 QDataStream &operator>>(QDataStream &in, vertex_info &v){

      return in;
 }






void MainWindow::on_button_save_clicked(){
    QString s = this->ui->lineEdit->text();
    this->ui->lineEdit->clear();

    vmap::iterator itr = myLogic->set.begin();
    graph_info my_graph;


    vertex_info vinfo;
    int i = 0;

    while(itr != myLogic->set.end()){
        vinfo.pos = itr->second->pos;
        vinfo.type = itr->second->type;
        my_graph.all_vertices[i] = vinfo;
        itr++;
        i++;
    }


    QFile file("test.dat");
    file.open(QIODevice::WriteOnly);
    QDataStream stream(&file);
    stream << my_graph;

    file.close();
}



void MainWindow::on_button_load_clicked(){
    this->on_button_clear_clicked();
    graph_info my_graph;
    QString s = this->ui->box_select_graph->currentText();

    QFile file("test.dat");
    file.open(QIODevice::ReadOnly);
    QDataStream in(&file);
    in >> my_graph;

    int i=0;
    while(i<sizeof(my_graph.all_vertices)){
       QString posx = QString::number(my_graph.all_vertices[i].pos.x());
       QString posy = QString::number(my_graph.all_vertices[i].pos.y());
       QString type = QString::number(my_graph.all_vertices[i].type);
       cout<<posx<<" "<<posy<<" "<<type<<'\n';
    }
}

所以我仍然没有为两个结构实现in流,因为我真的不知道它是如何工作的。

有任何建议/解决方案吗? :/

1 个答案:

答案 0 :(得分:0)

首先,我假设你在这里使用C ++。所以在struct graph_info你想要

std::vector<vertex_info> all_vertices;

然后在QDataStream &operator<<中你想要

size_t n = g.all_vertices.size();

同样在QDataStream &operator<<中,您可能想要将流的顶点数写入流中,以便读者能够首先读取该数据以了解要读取的数量。

一旦你完成了这项工作,你就会更好地开始编写>>运营商。