Ir ao conteúdo
  • Cadastre-se

Retornar dados de Arquivo em uma Struct (alteração de tamanho da Struct)


Posts recomendados

Bom dia,

 

Estou com com a seguinte questão para resolver.

Tenho uma struct X que recebe dados de uma stream (que eram de uma struct igual) e os coloca de volta em um arquivo, salvando a atual struct.

Preciso alterar o tamanho de uma variável da struct, porém quando faço isso os dados retornam totalmente errados (pois foram salvos com o tamanho da anterior). Não tenho a opção de simplesmente alterar o tamanho e limpar todos os registros pois já existem dados salvos no dispositivo que enviará os dados.

 

Vamos tentar explicar novamente pois não sei se ficou claro o anterior.

Tenho isso:

typedef struct {   int32 id;   int8  descricao[16 + 1];   int32 valor1;   int32 valor2;  } stt1;

Que já recebe normalmente os dados normalmente de um registro salvo em um arquivo, e preciso que se torne isso:

typedef struct {   int32 id;   int8  descricao[32 + 1];   int32 valor1;   int32 valor2;  } stt1;

Porém, quando simplesmente altero o tamanho da descrição, ele os dados de valor1 e valor2 vem errados (pra ser mais especifico, no inspect element olhando cada espaço de memória, eles aparecen dentro da descrição).
Não tenho a opção de simplesmente deletar todos os registros salvos e começar do zero.

 

Alguém tem alguma sugestão?

Link para o comentário
Compartilhar em outros sites

Opa, 
Essa solução sua funciona, porém não cumpre meu objetivo aqui (essa criação de um arquivo novo não está como uma opção).

 

O que eu consegui fazer por enquanto foi alterar a estrutura pra isso->

typedef struct {   int32 id;   int8  descricao[16 + 1];   int32 valor1;   int32 valor2;     int8  descricao2[32 + 1];} stt1;

Daí eu copio os dados para a descricao2 ao invés da anterior.
Por enquanto me resolve, mas o ideal seria não perder este espaço da descricao[16+1].

Link para o comentário
Compartilhar em outros sites

É atividade de aula?

Quando se modifica o tamanho de uma struct, será necessário reajustar todos os elementos do arquivo. Caso contrário, uma struct irá sobrescrever a próxima.

Como não é possível a criação de um novo arquivo para que seja feita a alteração uma a uma, então, terá de carregar todos os dados em memória para fazer as alterações.

Já que terá de fazer esse carregamento, porque não fazer a migração como comentei no post anterior?

Assim não ficará com parte do conteúdo numa variável e parte noutra.

Link para o comentário
Compartilhar em outros sites

Não é atividade em aula. É que cheguei nessa parte aqui de um sistema e os dados já estão rodando, daí não se sabe quando será ou não solicitada a atualização para que o programa faça a migração, ou seja, o sistema vai pedir uma atualização, porém não pode dar erro de compatibilidade com o formato utilizado nas versões antigas.

Referente ao armazenamento dos dados, eles não estão ficando cada parte em uma variável, estão indo para a nova e a antiga está ficando vazia.

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...