1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

AJUDA//PROGRAMAÇAO EM C++

Discussão em 'Programação' iniciada por Cardoso2018, 13 de Junho de 2018. (Respostas: 1; Visualizações: 123)

  1. Boas,estou a fazer um projeto para a escola em que eu faço uma struct,guardo no file e depois tenho de ler o file(colocando os dados na struct) e não sei como fazer.
    Se alguém podesse dar nem que fosse uma dica ficaria muito agradecido.
     
  2. anjo2

    anjo2 Power Member

    Uma struct é fácil, mas em geral, quando queres guardar dados de variáveis em ficheiros tens que serializar e depois basta fazer o inverso.

    Para isto funcionar é importante que o tamanho esteja definido, ou seja, que não dependa da arquitetura onde vais compilar.

    Exemplo, guardas 64 bits, em que são 2 inteiros de 8 bits (16 bits), mais 32 bits referentes a um array de chars de 8 bits, e depois mais 2 inteiros de 8 bits, ao ires buscar do ficheiro vais buscar pela mesma ordem e guardas nas variáveis.

    Código:
    #include <iostream>
    #include <fstream>
    #include <string>
    #include <cstring>
    
    struct Example
    {
       uint8_t id;
       uint8_t x;
       uint8_t name[15];
       uint8_t y;
       uint8_t z;
    };
    
    template <typename T>
    uint8_t save(const T &data)
    {
       std::fstream out("backup.bin", std::fstream::out | std::ofstream::binary);
       if(out.is_open())
       {
         out.write((char*)&data, sizeof(data));
         out.close();
         return 0;
       }
       return 1;
    }
    
    template <typename T>
    uint8_t load(const T &data)
    {
       std::fstream in("backup.bin", std::fstream::in | std::ifstream::binary);
       if(in.is_open())
       {
         in.read((char*)&data, sizeof(data));
         in.close();
         return 0;
       }
       return 1;
    }
    
    int main()
    {
       Example data_out; // = { 10, 11, "EX1", 22, 33 };
       Example data_in;
       
       data_out.id = 10;
       data_out.x = 11;
       data_out.y = 22;
       data_out.z = 33;
       memcpy(data_out.name, "EX1", sizeof("EX1"));
       
       save(data_out);
       std::cout << "ID: " << (uint32_t)data_out.id << std::endl;
       std::cout << "X: " << (uint32_t)data_out.x << std::endl;
       std::cout << "Y: " << (uint32_t)data_out.y << std::endl;
       std::cout << "Z: " << (uint32_t)data_out.z << std::endl;
       std::cout << "Name: " << data_out.name << std::endl;
       
       load(data_in);
       std::cout << "ID: " << (uint32_t)data_in.id << std::endl;
       std::cout << "X: " << (uint32_t)data_in.x << std::endl;
       std::cout << "Y: " << (uint32_t)data_in.y << std::endl;
       std::cout << "Z: " << (uint32_t)data_in.z << std::endl;
       std::cout << "Name: " << data_in.name << std::endl;
       
       return 0;
    }
    
     
    Última edição: 14 de Junho de 2018

Partilhar esta Página