• 0
Sign in to follow this  
MuriloTx

Leitura de arquivo binário

Question

Bom dia.

Estou tentando fazer uma leitura de structs que eu inseri em um arquivo binário, mas está dando erro na hora da leitura.

Segue o código da função de leitura:

void lerRegistros(char* file_name)
{
	ifstream entrada;
	entrada.open(file_name, ios::binary);
	
	if ( entrada )
	{
		entrada.seekg(0, entrada.end);
		int tam = entrada.tellg();
		entrada.seekg(0, entrada.beg);
		
		int numero_registros = tam / sizeof(registro);
		
		registro* vetor_registros = new registro[numero_registros];
				
	    for (int i = 0; i < numero_registros; i++) 
		{
			entrada.read((char*)(&vetor_registros[i]), sizeof(registro)); 	      
		}
		
		entrada.close();
			
		for ( int i = 0; i < numero_registros; ++i )
		{	
			cout << "Nome da banda: " << vetor_registros[i].nome << endl;
			cout << "Numero de integrantes: " << vetor_registros[i].numero_integrantes << endl;
			cout << "Estilo: " << vetor_registros[i].estilo << endl;
			cout << "Ano de criacao: " << vetor_registros[i].ano_criacao << endl;
			cout << "Melhor hit: " << vetor_registros[i].musica_famosa << endl;
			cout << endl;
		}
		
		vetor_registros = NULL;
		delete[] vetor_registros;
	}
	else
	{
	 	cout << "Erro na leitura do arquivo!";
	}
	
	return;
}

No programa, eu peço o nome do arquivo para ler os registros e passo esse nome para a função de leitura. O mais estranho é que se eu rodar o programa sem fechar ele, a leitura é feita normalmente após cada inserção de um novo registro. Mas se eu fechar o programa e abrir ele de novo, e tentar ler do mesmo arquivo que já foi criado aí dá erro na leitura e o programa fecha na hora. Se alguém souber o que pode ser, eu agradeço.

Share this post


Link to post
Share on other sites

2 answers to this question

Recommended Posts

  • 0
Guest

Tem um comando delete q não está correto. Seria essa a forma de fazer isso:

delete vetor_registros;

Outro ponto. Na função void lerRegistros(char* file_name) mude para isso:

 

void lerRegistros(const char* file_name)

Se resolveu poste o resultado, ok?

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this