🧩 Exercícios: Manipulação de Arquivos, Streams e Persistência Binária
Spec Sistemas Com C • Trilha Progressiva em 4 Níveis
🎯 Nível 1: Fundamentos
Problema 18.1 — Leitura e Escrita de Arquivos Texto com fopen(), fputs() e fgets()
Contexto: Leitura e Escrita de Arquivos Texto com fopen(), fputs() e fgets() no contexto de Manipulação de Arquivos, Streams e Persistência Binária.
Requisitos de Execução:
- Gravar relatório de texto em arquivo e ler linha por linha imprimindo no console.
Resultado Esperado
Arquivo criado, preenchido e lido com fechamento seguro via fclose().
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_18_1_SeuNome - Envie na tarefa:
Atividade Cap 18 - Manipulação de Arquivos, Streams e Persistência Binária
🔑 Gabarito de Código & Solução Comentada
#include <stdio.h>
int main(void) {
FILE *f = fopen("relatorio.txt", "w");
if (!f) return 1;
fputs("AUDITORIA: Execucao 100% concluida.\n", f);
fclose(f);
char buffer[64];
f = fopen("relatorio.txt", "r");
if (f && fgets(buffer, sizeof(buffer), f)) {
printf("Lido do arquivo: %s", buffer);
fclose(f);
}
return 0;
}
🔍 Nível 2: Prática
Problema 18.2 — Persistência Binária de Structs com fwrite() e fread()
Contexto: Persistência Binária de Structs com fwrite() e fread() no contexto de Manipulação de Arquivos, Streams e Persistência Binária.
Requisitos de Execução:
- Gravar struct de cliente diretamente em arquivo binário
.bine recuperá-la na íntegra.
Resultado Esperado
Dados binários gravados e lidos com exata correspondência em memória.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_18_2_SeuNome - Envie na tarefa:
Atividade Cap 18 - Manipulação de Arquivos, Streams e Persistência Binária
🔑 Gabarito de Código & Solução Comentada
#include <stdio.h>
typedef struct { int id; double saldo; } Conta;
int main(void) {
Conta c_out = {1001, 1500.50};
FILE *f = fopen("conta.bin", "wb");
if (f) { fwrite(&c_out, sizeof(Conta), 1, f); fclose(f); }
Conta c_in;
f = fopen("conta.bin", "rb");
if (f) {
fread(&c_in, sizeof(Conta), 1, f);
fclose(f);
printf("Conta lida: ID=%d | Saldo=R$ %.2f\n", c_in.id, c_in.saldo);
}
return 0;
}
⚡ Nível 3: Integração
Problema 18.3 — Acesso Aleatório com fseek(), ftell() e rewind()
Contexto: Acesso Aleatório com fseek(), ftell() e rewind() no contexto de Manipulação de Arquivos, Streams e Persistência Binária.
Requisitos de Execução:
- Descobrir o tamanho total de um arquivo posicionando o cursor no final com
fseek(f, 0, SEEK_END).
Resultado Esperado
Tamanho do arquivo medido em bytes com precisão.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_18_3_SeuNome - Envie na tarefa:
Atividade Cap 18 - Manipulação de Arquivos, Streams e Persistência Binária
🔑 Gabarito de Código & Solução Comentada
#include <stdio.h>
int main(void) {
FILE *f = fopen("dados.dat", "w");
if (f) { fputs("1234567890", f); fclose(f); }
f = fopen("dados.dat", "rb");
if (f) {
fseek(f, 0, SEEK_END);
long tamanho = ftell(f);
fclose(f);
printf("Tamanho exato do arquivo: %ld bytes\n", tamanho);
}
return 0;
}
🏆 Nível 4: Desafio Corporativo
Problema 18.4 — Escrita Transacional Atômica com Arquivo Temporário e rename()
Contexto: Escrita Transacional Atômica com Arquivo Temporário e rename() no contexto de Manipulação de Arquivos, Streams e Persistência Binária.
Requisitos de Execução:
- Gravar dados em arquivo temporário
.tmpe executarrename()atômico para prevenir corrupção em caso de queda de energia.
Resultado Esperado
Persistência atômica garantida sem risco de arquivos corrompidos.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_18_4_SeuNome - Envie na tarefa:
Atividade Cap 18 - Manipulação de Arquivos, Streams e Persistência Binária
🔑 Gabarito de Código & Solução Comentada
#include <stdio.h>
int main(void) {
FILE *f = fopen("banco.tmp", "w");
if (!f) return 1;
fputs("DADOS CRITICOS ATUALIZADOS", f);
fflush(f);
fclose(f);
// Substituição atômica no sistema de arquivos
if (rename("banco.tmp", "banco.dat") == 0) {
puts("Transacao persistida atomicamente com sucesso.");
}
return 0;
}