Nick-us
(usa Slackware)
Enviado em 09/05/2020 - 14:41h
paulo1205 escreveu:As estruturas são do mesmo tipo, ou são de tipos distintos?
Boa Pergunta, esqueçi de informar. As Structs são diferentes, Umas terão mais variáveis outras não, inclusive são usadas para propósitos totalmente diferentes, elas nada tem a ver uma com as outras nem em tamanho e nem em nada a não ser por coincidência. Tipo um exemplo abaixo.
struct {
char Cod[15];
char Registered[17];
char Modified[17];
} Contacts[10] = {0};
struct {
char T1234[9];
int T1234[14];
} Contacts2[10] = {0};
struct {
char A123[20];
char B123[23];
} Contacts3[10] = {0};
A pergunta que fiz é baseada na seguinte idéia que pensei! Inicialmente eu fiz um programa com apenas 1 Struct que eu salvo no arquivo! Porém agora eu quero colocar outras 2 Structs no programa. Que são usadas para coisas diferentes. Mas seria interessante eu salvá-las no mesmo arquivo, assim apenas 1 comando Save salvaria tudo para acessar depois.
No Momento atual esse programinha que fiz não salva em binário, optei por salvar os dados como texto, criei um sistema para separar configurações através de linhas específicas, e Salvo 1 Struct a partir da Linha 5. Uso Caracteres especiais da Tecla ASCII como SOH, STX, ETX, GS, RS, US para separar Registros, Configurações, Campos e etc... E o que faço é varrer o arquivo para obter os dados.
Salvo como texto para analisar visualmente o arquivo enquanto desenvolvo o programa, até porque mais na frente, antes de salvar eu criptografarei os dados.
Porém, Embora eu goste da forma como inventei, me sinto seguro vendo e tendo 100% de certeza que está tudo lá, quero também ter capacidade para confiar em gravação binária, o que ainda estou estudando o fwrite de minha última pergunta. E me deparei com o problema do fwrite gravar apenas 1 Struct, o que com certeza não me serviria em nada, visto que como disse, eu salvo tanto a Struct como outras coisas e configurações, logo se eu fosse usar o fwrite neste caso, eu teria que criar 1 Struct para configurações, outra Struct para os Dados, Outra para dados secundários... E é aqui que fiquei perdido em como salvar tantas structs e 1 arquivo de uma só vez, e poder ler tudo novamente certinho do arquivo para o programa!
Uma idéia do meu arquivo atual usando um sistema de texto:
STXchar Cod[15];char Registered[17];char Modified[17];char Photo[251];char Name[251];char Phone[1001];char Address[1001];char Sexy[2];char Gender[2];char Sign[12];char Group[21];char Indicated[101];char LastContact[17];char Internet[251];char Career[101];char Connections[101];char Update[101];char Mark[2];char Pendency[2];char ReasonPendency[251];char Folder[251];char Personality[50001];char Family[50001];char Note[50001];char Docs[50001];char Pcs[50001];char Hist[50001];ETX
STX US> Add/Remove/EditETX
RS09052020120507US09/05/2020 12:05US09/05/2020 12:05US/home/nick/Desktop/Contacts/3x4.pngUSJynx MazeUSUSUS0USUSUSUSUSUSUSUSUSUS0US0USUSUSUSUSUSUSUSUS
RS09052020120523US09/05/2020 12:05US09/05/2020 12:05US/mnt/dados/nick/Images/Avatars/Daenerys.pngUSDaenerysUSUSUS0USUSUSUSUSUSUSUSUSUS0US0USUSUSUSUSUSUSUSUS
Nesse arquivo se lê:
STX = Inicio de um Registro Especial que nada tem a ver com a Struct | Caracter 2 da tabela ASCII
ETX = Fim de um Registro Especial que nada tem a ver com a Struct | Caracter 3 da tabela ASCII
US = Separador de Campos | Caracter 31 da tabela ASCII
RS = Inicio de Registros da Struct | Caracter 30 da tabela ASCII
1ª Linha = Informações da Struct atual usada para salvar o arquivo naquele momento.
3ª Linha = Tabela de Grupos
5ª Linha para frente os dados da Struct
SEMPRE seguindo as regras acima
Então no Caso desse arquivo se eu fosse salvar usando o fwrite por exemplo, eu teria que usar 2 Structs. Uma para a Struct normal e outra para salvar a Linha 1 e a Linha 3. Por isso a pergunta se consigo salvar mais de uma Struct em 1 arquivo e poder ler elas separadamente.