Read and write binary file in iteration

Asked

Viewed 172 times

0

I’m doing a college job that requires us to create a system that records multiple read structures of the standard output into a binary file, leading to the need(?) for iteration usage.

Unlike the ease that we have in the text files, I’m having problems in writing (Inserted function, I’m not sure that’s right) and reading (Listed):

#include <iostream>
#include <fstream>
using namespace std;

struct PersonagemDesenho {//declarando a estrutura que vai carregar os dados do personagem
   string nomePersonagem, nomeCriador;
   string tituloDesenho, relacoesPersonagem;
};


void InserirDados () {

    //variavel para criacao do vetor de registro que sera informado pelo usuario
    int quantidade;

    cout << "Quantos personagens voce pretende inserir nesta sessao?" << endl;
    cin >> quantidade;

    //criando espaco na memoria para utilizacao de um vetor dinamico
    PersonagemDesenho* objPersonagem = new PersonagemDesenho[quantidade];

    //declarando o fluxo de dados e criando o arquivo em modo de escrita
    ofstream arquivo ("personagens.dat", ios::binary);

    //conferir se o arquivo foi criado com sucesso
    if (!arquivo) {
        ofstream arquivo ("personagens.dat", ios::binary);
    }

    //limpa o buffer do cin
    cin.ignore ();

    //como usaremos getline, espacos serao permitidos
    cout << "(A utilizacao de espacos e' permitida para todos os itens a seguir)" << endl;

    //descricao das caracteristicas e tudo mais dos personagens
    for (int i = 0; i < quantidade; i++) {
        cout << " - PERSONAGEM NUMERO: " << i + 1 << endl;

        cout << "Digite o nome do personagem a ser inserido" << endl;
        //getline para pegar o sobrenome e/ou nomes compostos
        getline(cin, objPersonagem[i].nomePersonagem);

        cout << "Digite o nome do criador do personagem" << endl;
        getline(cin, objPersonagem[i].nomeCriador);

        cout << "Digite o titulo do desenho ao qual o personagem pertence" << endl;
        getline(cin, objPersonagem[i].tituloDesenho);

        cout << "Digite personagens relacionados ao personagem principal" << endl;
        getline(cin, objPersonagem[i].relacoesPersonagem);

        //CODIGO DE GRAVAÇÃO
        arquivo.write(reinterpret_cast<const char*> (&objPersonagem[i]), sizeof(PersonagemDesenho));
        }
    cout << "As informacoes serao salvas no arquivo \"personagens.dat\"" << endl;
    //fechamento do arquivo
    arquivo.close();
    //if conferindo se o arquivo criado corretamente
    if(arquivo){
        cout << "As informacoes foram salvas com sucesso!" << endl;
    }
}

void AtualizaDados () {

}

void BuscaDados () {

}

void ListaDados () {

    ifstream arquivo ("personagens.dat", ios::binary);
    int i = 0;

    while (???) {
        arquivo.read(reinterpret_cast<const char*> (&objPersonagens[i]) sizeof(PersonagemDesenho))
        i++;
    }
}

int main () {

    char opcaoEscolhida;

    cout << "Digite o numero referente a opcao que procura" << endl << endl;
    cout << "Digite \"1\" para inserir dados no sistema" << endl;
    cout << "Digite \"2\" para atualizar os dados existentes" << endl;
    cout << "Digite \"3\" para realizar uma busca nos dados salvos" << endl;
    cout << "Digite \"4\" para listar os dados salvos em ordem alfabetica" << endl;
    cout << "Pressione qualquer outra tecla para sair do sistema" << endl;

    cin >> opcaoEscolhida;

    if (opcaoEscolhida == '1') {
        InserirDados ();
    }
        else if (opcaoEscolhida == '2') {
            AtualizaDados ();
        }
            else if (opcaoEscolhida == '3') {
                BuscaDados ();
            }
                else if (opcaoEscolhida == '4') {
                    ListaDados ();
                }
                    else {
                        cout << "Valor invalido" << endl;
                    }

    return 0;
}
  • How will you read from the "standard output"?

  • Inside my for has a getline (Cin, string) for each field, as I do not know how to assemble the structure to read what is in the file, I do not know if it is right.

No answers

Browser other questions tagged

You are not signed in. Login or sign up in order to post.