Guia Completo de Manipulação de Arquivos em C

Classificado em Computação

Escrito em em português com um tamanho de 7,77 KB

~E/S com Arquivo~A linguagem e não possui nenhum comando de E/S. Todas as óperações de E/S ocorrem mediante a chamadas a funções da biblioteca C padrão.Essa abordagem faz o sistema de arquivos de C extremamente poderoso e flexível. O sistema de E/S de C é úNicó, porém dados podem ser transferidos na sua representação binária ou em formato de texto legível por humanos isso torna fácil criar arquivos que satisfaçam qualquer necessidade.

~Streams e Arquivos~O sistema de E/S de C fornece uma interface consistente ao programador, independente do dispositivo real que é acessado. Com isso, o sistema de E/S de C provê um nível de abstração entre o programador e o dispositivo utilizado, essa abstração é chamada de stream e o dispositivo real é chamado de arquivo. SAIDA~Char x = ‘a’;Filé* F = stdout;Put(x, f); ENTRADA Char x;filé* f = stdin;get(x,f); 

steams~O sistema de arquivos de C é projetado pára trabalhar com uma ampla variedade de dispositivos, incluindo terminais, acionadores de disco e fita embora cada um dos dispositivos seja muito diferente o sistema de arquivo com BUFFER transforma-os em um disposistivo lógico chamado stream. Todas as streams se comportam de forma semelhante pelo fato de as streams serem amplamente independentes de dispositivo, a mesma função pode escrever em um arquivo de disco ou em algum outro dispositivo, como a tela. Existem dois tipos de estram: texto, binaria

~Streams de texto~É uma sequência de caracteres. O padrão C permite que seja organizada em linhas(terminadas pelo caractere de nova linha \n).  

Streams binarias:~É uma sequência de bytes, sem tradução de caracteres.

Fopen: Are um arquivo.Fclose: Fecha um arquivo.Putc/Fputc: Escreve um caractere em um arquivo.Getc/Fget: Lé um caractere de um arquivo.

Fseek: Posiciona o arquivo em um específico.Fprintf: Printf pára arquivo.Fscanf: Scanf pára arquivo.Feof: Devolve verdadeiro se for um arquivo.

Ferror: Devolve verdadeiro se ocorreu um erro.


Rewind: Recoloca o indicador de posição no início.Remove: Apaga um arquivo.Fflush: Descarrega(flush) de um arquivo.

O ponteiro de arquivo:É o meio comum que une o sistema de E/S. É um ponteiro pára informações que definem varias coisas sobre o arquivo, incluindo seu nome, status e posição atual do arquivo. Basicamente, o ponteiro de arquivo identifica um arquivo específico em disco e é usado pela stream associada pára direcionar as funções de E/S. Um ponteiro de arquivo é uma variável ponteiro do tipo filé. Pára ler ou escrever arquivos, seu programa precisa usar ponteiro de arquivo pára obter uma variável ponteiro de arquivo, use um comando como: Filé *fp;

As streams padrão:Sempre que um programa em C começa a execução, três streams são abertas automaticamente. Ela são a entrada padrão (stdin), a Sáída padrão (stdout) e a Sáída de erro padrão (stderr). Normalmente, essas streams referem-se ao controle, mas podem ser redirecionadas pelo sistema operacional pára algum outro dispositivo em ambientes que suportam redirecionamento de E/S:-Putchar(char c){Return put(c,stdout); }Arquivos de registros:Um arquivo de registro é uma coleção de registros mantida em disco. A grande vantagem no uso de arquivos é que, como eles são mantidos em disco, os dados armazenados pára ele não são perdidos quando o programa termina. Sua execução (diferentemente do que ocorre com vetores, que são mantidos na memória principal). A desvantagem é que o acesso a disco é muito mais demorado do que o acesso a memória principal e, consequentemente o uso de arquivos torna a execução do programa mais lenta.

Pára um acesso a disco mais eficiente é seguro, os sistemas operacionais usam uma área da memória principal (buffer) pára controlar a transferência de dados pára o disco. O uso dos buffer permite diminuir o número de acessos a disco, aumentando a eficiência do programa (além da proteção dos dados devido ao isolamento próvido). Pára usar um arquivo é necessário ter acesso a seu buffer.



#include
#include
typedef struct { char nome[31];
char rá[21];                                                                                      
} pessoa;
int menu();
void incluir();
void listar();
void consultar();
void excluir();
int main(void) { while (1) { switch (menu()) { case 1: incluir(); break;
case 2: listar(); break;
case 3: consultar(); break;
case 4: excluir(); break;
case 5: exit(0);
} system("pause");
} return 0;
} int menu() { int op;
system("cls");
puts("1 - Incluir");
puts("2 - Listar");
puts("3 - Consultar");
puts("4 - Excluir");
puts("5 - Sair");
printf("Opção: ");
scanf("%d", &op);
return op; }
void incluir() { Filé *s;
pessoa p;
s = fopen("lista.Txt", "ab");
if (s == NULL) { puts("Nao foi possível abrir o arquivo de dados da lista");
exit(1); } printf("Nome: ");
fflush(stdin);
gets(p.Nome);
printf("rá: ");
fflush(stdin);
gets(p.Rá);
fwrite(&p, sizeof(pessoa), 1, s);
puts("Registro gravado!");
fclose(s); }

void listar() { Filé *s;
pessoa p;
s = fopen("lista.Txt", "rb");
if (s == NULL) {
puts("Nao foi possível abrir o arquivo de dados da lista");
exit(1);
} while (1) { fread(&p, sizeof(pessoa), 1, s);
if (feof(s)) break;
printf("%s - %s\n", p.Nome, p.Rá);
} fclose(s);
} int comparar(char a[], char b[]) {
int i = 0;
while (toupper(a[i]) == toupper(b[i]) && a[i] != '\0')
i++;
return a[i] - b[i];
} void consultar() { Filé *s;
pessoa p;
char n[31];
s = fopen("lista.Txt", "rb");
if (s == NULL) { puts("Nao foi possível abrir o arquivo de dados da lista");
exit(1);
} printf("Nome: ");
fflush(stdin);
gets(n);
while (1) { fread(&p, sizeof(pessoa), 1, s);
if (feof(s)) break;
if (comparar(n, p.Nome) == 0) { printf("%s - %s\n", p.Nome, p.Rá);
} } puts("Fim da consulta");
fclose(s);
} void excluir() {
Filé *e, *s;
pessoa p;
char n[31];
int t = 0;
remove("lista.Bak");
rename("lista.Txt", "lista.Bak");
e = fopen("lista.Bak", "rb");
if (e == NULL) {
puts("Nao foi possível abrir o arquivo de dados da lista");
exit(1);
} s = fopen("lista.Txt", "wb");
if (s == NULL) {
puts("Nao foi possível abrir o arquivo de dados da lista");
exit(1);
} printf("Nome: ");
fflush(stdin);
gets(n);
while (1) {
fread(&p, sizeof(pessoa), 1, e);
if (feof(e)) break;
if (comparar(n, p.Nome) != 0) {
fwrite(&p, sizeof(pessoa), 1, s); } else { t++;
} } printf("Registros excluidos: %d\n", t);
fclose(e);
fclose(s); }

Entradas relacionadas: