Programação · 6 min read · Oct 09, 2025
Aprendendo C/C++ Passo a Passo - Página 12
12. Passo a Passo CorC++ — Programação C - Arquivos
Manipulação de Arquivos
Introdução
Vamos encontrar a saída do seguinte programa.
| |
|
Sim, ele aceita um registro de informações do aluno e as exibe.
Aqui está o mesmo programa, mas com algumas modificações incluídas.
| |
|
Os dois programas acima são iguais, mas o segundo programa contém uma instrução destacada (FILE *fp = fopen(“stud.dat”, “a+”);) e algumas modificações como ‘f printf’, ‘ fp’. Apenas algumas modificações foram incluídas. Essas modificações afetam a transferência de dados do console para o disquete no arquivo stud.dat. Esse processo é conhecido como controle de arquivos/gerenciamento de arquivos/organização de arquivos.
Esta é a maneira mais fácil de transferir a saída do monitor para um arquivo usando a instrução de controle de arquivos.
| |
|
Na verdade, o processamento de arquivos envolve muitas operações, bem como métodos a serem implementados. Aqui está o processo real para manipular arquivos.
Manipulação de Arquivos
Geralmente, todo programa deve apresentar os valores resultantes na tela (o 1º programa ilustra isso). Mas esses valores são removidos da memória sempre que o programa é encerrado. Se quisermos manter registros permanentemente, salve-os em um arquivo. Cada arquivo tem algumas operações, aqui estão algumas;
| |
|
| |
|
Operações de Arquivo
| fopen | Abre o fluxo filename no modo mode & se for bem-sucedido, retorna um ponteiro para o fluxo recém-aberto; ou Nulo caso contrário. |
| Sintaxe ** | FILE fopen(const char filename, const char *mode); |
| Ex. | FILE fp = fopen(“stud.dat”, “r”); / Ler do arquivo /
FILE fp = fopen(“emp.dat”, “w”); / Escrever no arquivo /
FILE fp = fopen(“emp.dat”, “a+”); / Ler e Escrever no arquivo / | | | Modo:
A string de modo usada nas chamadas para fopen, é um dos seguintes valores: Modo Descrição r Abre para leitura apenas w Cria para escrita (Se um arquivo com esse nome já existir, será sobrescrito). a Anexa; abre para escrita no final do arquivo, ou cria para
escrita se o arquivo não existir. r+ Abre um arquivo existente para atualização (leitura e escrita) w+ Cria um novo arquivo para atualização (leitura e escrita).
Se um arquivo com esse nome já existir, será sobrescrito. a+ Abre para anexar; abre para atualização no final do arquivo, ou
cria se o arquivo não existir. Para especificar que um determinado arquivo está sendo aberto ou criado em modo texto,
anexe “ t “ à string ( rt, w+t,* etc.).
Para especificar o modo binário, anexe “ b “ à string ( wb, a+b, etc.). | | fclose | Fecha o arquivo apontado por fp & retorna 0 em caso de sucesso, EOF é retornado em caso de erro | | Sintaxe | Int fclose(FILE *fp); | | ex. | Fclose(fp); fclose(stud); fcloseall(); | | fprintf | Envia saída formatada para um fluxo. Usa os mesmos especificadores de formato que printf, mas envia a saída para o fluxo especificado. Retorna o número de bytes de saída ou EOF em caso de erro. | | Sintaxe | Fprintf(fptr, “String de Controle”, lista); | | Ex. | Fprintf(fp, “%d %s %d %d %d”, sno, name, sub1, sub2, sub3);
fprintf(emp, “%d %s %d”, eno, name, sal); | | fscanf | Esta função é usada para ler dados formatados de um arquivo especificado. | | Sintaxe: | Fscanf(fptr, “String de Controle”, lista); | | Ex. | Fscanf(fp, “%d %s %d %d %d”, &sno, name, &sub1, &sub2, &sub3);
fscanff(emp, “%d %s %d”, &eno, name, &sal); | | fwrite | Fwrite anexa um número especificado de itens de dados de tamanho igual a um arquivo de saída. | | Sintaxe: | Size_t fwrite(const void ptr, size_t size, size_t n, FILEstream); Argumento O que É/Faz Ptr Ponteiro para qualquer objeto; os dados escritos começam em ptr Size Comprimento de cada item de dados N Número de itens de dados a serem anexados stream Especifica o arquivo de saída
O número total de bytes escritos é ( n size) | | fread | Fread recupera um número especificado de itens de dados de tamanho igual de um arquivo de entrada. | | Sintaxe | Size_t fread(void ptr, size_t size, size_t n, FILEstream); Argumento O que É/Faz Ptr Ponteiro para qualquer objeto; os dados escritos começam em ptr size Comprimento de cada item de dados n Número de itens de dados a serem anexados stream Especifica o arquivo de saída
O número total de bytes escritos é ( n size) | | rewind | Reposiciona o ponteiro do arquivo para o início do fluxo | | Sintaxe | Void rewind(FILE stream);
Ex. fewind(fp);
Rewind(stream) é equivalente a fseek(stream, 0L, SEEK_SET)
exceto que rewind limpa os indicadores de fim de arquivo e erro, enquanto fseek apenas limpa o indicador de fim de arquivo. Após rewind, a próxima operação em um arquivo de atualização pode ser entrada ou saída. | | fseek | O ponteiro do arquivo para o fluxo é posicionado em um número de bytes de deslocamento calculado a partir da posição especificada por whence. O deslocamento pode ser zero, negativo ou positivo. Os símbolos definidos SEEK_CUR, SEEK_SET & SEEK_END são usados como especificadores whence para indicar a posição atual. BOF & EOF, respectivamente. Retorna 0 se bem-sucedido ou não zero em caso de falha. | | Sintaxe | Int fssek(FILE stream, long offset, int whence); | | ftell | Retorna a posição atual do ponteiro do arquivo em caso de sucesso ou valor negativo em caso de erro. | | Sintaxe | Long ftell(FILE *stream); | | feof | É uma macro para retornar um valor diferente de zero se o fim do arquivo foi alcançado no fluxo. | | Sintaxe | Int feof(FILE *stream); | | eof | Verifica se o marcador de posição no arquivo dado pelo seu identificador está no fim do arquivo. Se sim, retorna 0, 1 é retornado se o marcador de posição NÃO estiver no fim do arquivo & um erro é indicado pelo ajuste de errno & valor de retorno de –1. | | Sintaxe | Int eof(int handle); | | fgets /
fputs | A função fgets/fputs obtém/coloca uma string (de tamanho n bytes) no arquivo apontado por stream e retorna fim de arquivo em caso de erro. | | Sintaxe | Char fgets(char s, int n, FILE *stream); | | fgetc/fputc
Sintaxe | Lê/escreve um caractere de um fluxo.
Int fgetc/fputc(FILE *stream); | | fgetchar/
fputchar | Estes são equivalentes aos acima fgetc/fputc.
Escreva um programa para ler os dados de um aluno e armazená-los em um arquivo de dados.
| | / Programa para criar um arquivo de dados de aluno /
/ 85_write.c /
#include
#include
#include
int main()
{
int sno, sub1, sub2, sub3;
char name[10],ch;
FILE *fp = fopen(“stud.dat”, “w”);
do{
clrscr();
printf(“Digite o número do aluno “); scanf(“%d”, &sno);
printf(“Digite o nome do aluno “); scanf(“%s”, name);
printf(“Digite as notas de 3 disciplinas “);
scanf(“%d%d%d”, &sub1, &sub2, &sub3);
fprintf(fp, “%d %s %d %d %d\n”, sno, name, sub1, sub2, sub3);
printf(“\n\nVocê quer continuar… (y/n)”); ch = getche();
}while(toupper(ch) != ‘N’);
fclose(fp);
return 0;
} |
Escreva um programa para recuperar dados de um arquivo de dados de aluno.
| | / Programa para recuperar dados de um arquivo de dados de aluno /
/ 86_read.c /
#include
#include
int main()
{
int sno, sub1, sub2, sub3;
char name[10];
FILE *fp = fopen(“stud.dat”, “a+”);
clrscr();
printf(“Os registros dos alunos são os seguintes….\n”);
do{
fscanf(fp, “%d%s%d%d%d\n”, &sno, name, &sub1, &sub2, &sub3);
printf(“%5d%15s%3d%3d%3d\n”, sno, name, sub1, sub2, sub3);
}while(!feof(fp));
fclose(fp);
return 0;
} |
Receba novas postagens na sua caixa de entrada
Sem spam. Cancele a assinatura a qualquer momento.