E / S de arquivos C: Criar, abrir, ler, gravar e fechar um arquivo

Índice:

Anonim

C gerenciamento de arquivos

Um arquivo pode ser usado para armazenar um grande volume de dados persistentes. Como muitas outras linguagens, 'C' fornece as seguintes funções de gerenciamento de arquivos,

  1. Criação de um arquivo
  2. Abrindo um arquivo
  3. Lendo um arquivo
  4. Gravando em um arquivo
  5. Fechando um arquivo

A seguir estão as funções de gerenciamento de arquivos mais importantes disponíveis em 'C,'

função propósito
fopen () Criar um arquivo ou abrir um arquivo existente
fclose () Fechando um arquivo
fprintf () Gravando um bloco de dados em um arquivo
fscanf () Lendo um bloco de dados de um arquivo
getc () Lê um único caractere de um arquivo
putc () Grava um único caractere em um arquivo
getw () Lê um número inteiro de um arquivo
putw () Gravando um inteiro em um arquivo
fseek () Define a posição de um ponteiro de arquivo para um local especificado
ftell () Retorna a posição atual de um ponteiro de arquivo
retroceder () Define o ponteiro do arquivo no início de um arquivo

Neste tutorial, você aprenderá-

  • Como criar um arquivo
  • Como fechar um arquivo:
  • Gravando em um Arquivo
    • Função fputc ():
    • Função fputs ():
    • Função fprintf ():
  • Lendo dados de um arquivo
  • Leitura e gravação de arquivos interativos com getc e putc

Como criar um arquivo

Sempre que você quiser trabalhar com um arquivo, o primeiro passo é criar um arquivo. Um arquivo nada mais é do que um espaço na memória onde os dados são armazenados.

Para criar um arquivo em um programa 'C', a sintaxe é usada,

FILE *fp;fp = fopen ("file_name", "mode");

Na sintaxe acima, o arquivo é uma estrutura de dados definida na biblioteca padrão.

fopen é uma função padrão usada para abrir um arquivo.

  • Se o arquivo não estiver presente no sistema, ele será criado e aberto.
  • Se um arquivo já estiver presente no sistema, ele será aberto diretamente com esta função.

fp é um ponteiro de arquivo que aponta para o arquivo de tipo.

Sempre que você abre ou cria um arquivo, é necessário especificar o que fará com o arquivo. Um arquivo em programação 'C' pode ser criado ou aberto para fins de leitura / escrita. Um modo é usado para especificar se você deseja abrir um arquivo para qualquer uma das finalidades fornecidas abaixo. A seguir estão os diferentes tipos de modos de programação 'C' que podem ser usados ​​ao trabalhar com um arquivo.

Modo de Arquivo Descrição
r Abra um arquivo para leitura. Se um arquivo estiver no modo de leitura, nenhum dado será excluído se um arquivo já estiver presente em um sistema.
C Abra um arquivo para gravação. Se um arquivo estiver no modo de gravação, um novo arquivo será criado se não existir um arquivo. Se um arquivo já estiver presente em um sistema, todos os dados dentro do arquivo serão truncados e abertos para fins de gravação.
uma Abra um arquivo no modo anexar. Se um arquivo estiver no modo anexar, ele será aberto. O conteúdo do arquivo não muda.
r + aberto para leitura e escrita desde o início
w + aberto para leitura e gravação, sobrescrevendo um arquivo
a + aberto para leitura e escrita, anexando ao arquivo

Na sintaxe fornecida, o nome do arquivo e o modo são especificados como strings, portanto, devem sempre ser colocados entre aspas duplas.

Exemplo:

#include int main() {FILE *fp;fp = fopen ("data.txt", "w");}

Resultado:

O arquivo é criado na mesma pasta onde você salvou seu código.

Você pode especificar o caminho onde deseja criar seu arquivo

#include int main() {FILE *fp;fp = fopen ("D://data.txt", "w");}

Como fechar um arquivo

Sempre se deve fechar um arquivo sempre que as operações no arquivo terminarem. Isso significa que o conteúdo e os links para o arquivo foram encerrados. Isso evita danos acidentais ao arquivo.

'C' fornece a função fclose para executar a operação de fechamento de arquivo. A sintaxe de fclose é a seguinte,

fclose (file_pointer);

Exemplo:

FILE *fp;fp = fopen ("data.txt", "r");fclose (fp);

A função fclose recebe um ponteiro de arquivo como argumento. O arquivo associado ao ponteiro do arquivo é então fechado com a ajuda da função fclose. Retorna 0 se o fechamento foi bem sucedido e EOF (fim do arquivo) se ocorreu um erro durante o fechamento do arquivo.

Depois de fechar o arquivo, o mesmo ponteiro de arquivo também pode ser usado com outros arquivos.

Na programação 'C', os arquivos são fechados automaticamente quando o programa é encerrado. Fechar um arquivo manualmente escrevendo a função fclose é uma boa prática de programação.

Gravando em um Arquivo

Em C, quando você grava em um arquivo, os caracteres de nova linha '\ n' devem ser adicionados explicitamente.

A biblioteca stdio oferece as funções necessárias para gravar em um arquivo:

  • fputc (char, file_pointer) : Grava um caractere no arquivo apontado por file_pointer.
  • fputs (str, file_pointer) : Grava uma string no arquivo apontado por file_pointer.
  • fprintf (file_pointer, str, variable_lists) : Imprime uma string para o arquivo apontado por file_pointer. A string pode incluir opcionalmente especificadores de formato e uma lista de variáveis ​​variable_lists.

O programa abaixo mostra como realizar a gravação em um arquivo:

Função fputc ():

#include int main() {int i;FILE * fptr;char fn[50];char str[] = "Guru99 Rocks\n";fptr = fopen("fputc_test.txt", "w"); // "w" defines "writing mode"for (i = 0; str[i] != '\n'; i++) {/* write to file using fputc() function */fputc(str[i], fptr);}fclose(fptr);return 0;}

Resultado:

O programa acima grava um único caractere no arquivo fputc_test.txt até atingir o símbolo da próxima linha "\ n" que indica que a frase foi escrita com sucesso. O processo consiste em pegar cada caractere do array e gravá-lo no arquivo.

  1. No programa acima, criamos e abrimos um arquivo chamado fputc_test.txt em um modo de escrita e declaramos nossa string que será escrita no arquivo.
  2. Fazemos uma operação de gravação caractere por caractere usando o loop for e colocamos cada caractere em nosso arquivo até que o caractere "\ n" seja encontrado, então o arquivo é fechado usando a função fclose.

Função fputs ():

#include int main() {FILE * fp;fp = fopen("fputs_test.txt", "w+");fputs("This is Guru99 Tutorial on fputs,", fp);fputs("We don't need to use for loop\n", fp);fputs("Easier than fputc function\n", fp);fclose(fp);return (0);}

RESULTADO:

  1. No programa acima, criamos e abrimos um arquivo chamado fputs_test.txt em modo de gravação.
  2. Depois de fazermos uma operação de gravação usando a função fputs (), escrevendo três strings diferentes
  3. Em seguida, o arquivo é fechado usando a função fclose.

Função fprintf ():

#include int main() {FILE *fptr;fptr = fopen("fprintf_test.txt", "w"); // "w" defines "writing mode"/* write to file */fprintf(fptr, "Learning C with Guru99\n");fclose(fptr);return 0;}

RESULTADO:

  1. No programa acima, criamos e abrimos um arquivo chamado fprintf_test.txt em modo de gravação.
  2. Depois que uma operação de gravação é realizada usando a função fprintf () escrevendo uma string, o arquivo é fechado usando a função fclose.

Lendo dados de um arquivo

Existem três funções diferentes dedicadas à leitura de dados de um arquivo

  • fgetc (file_pointer): Retorna o próximo caractere do arquivo apontado pelo ponteiro do arquivo. Quando o final do arquivo é alcançado, o EOF é enviado de volta.
  • fgets (buffer, n, file_pointer): Lê n-1 caracteres do arquivo e armazena a string em um buffer no qual o caractere NULL '\ 0' é anexado como o último caractere.
  • fscanf (file_pointer, conversion_specifiers, variable_adresses) : É usado para analisar e analisar dados. Ele lê os caracteres do arquivo e atribui a entrada a uma lista de ponteiros de variáveis ​​variable_adresses usando especificadores de conversão. Lembre-se de que, como com scanf, fscanf para de ler uma string quando um espaço ou nova linha é encontrado.

O programa a seguir demonstra a leitura do arquivo fputs_test.txt usando as funções fgets (), fscanf () e fgetc (), respectivamente:

#include int main() {FILE * file_pointer;char buffer[30], c;file_pointer = fopen("fprintf_test.txt", "r");printf("----read a line----\n");fgets(buffer, 50, file_pointer);printf("%s\n", buffer);printf("----read and parse data----\n");file_pointer = fopen("fprintf_test.txt", "r"); //reset the pointerchar str1[10], str2[2], str3[20], str4[2];fscanf(file_pointer, "%s %s %s %s", str1, str2, str3, str4);printf("Read String1 |%s|\n", str1);printf("Read String2 |%s|\n", str2);printf("Read String3 |%s|\n", str3);printf("Read String4 |%s|\n", str4);printf("----read the entire file----\n");file_pointer = fopen("fprintf_test.txt", "r"); //reset the pointerwhile ((c = getc(file_pointer)) != EOF) printf("%c", c);fclose(file_pointer);return 0;}

Resultado:

----read a line----Learning C with Guru99----read and parse data----Read String1 |Learning|Read String2 |C|Read String3 |with|Read String4 |Guru99|----read the entire file----Learning C with Guru99

  1. No programa acima, abrimos o arquivo chamado "fprintf_test.txt" que foi escrito anteriormente usando a função fprintf () e contém a string "Aprendendo C com Guru99". Nós o lemos usando a função fgets () que lê linha por linha onde o tamanho do buffer deve ser suficiente para lidar com a linha inteira.
  2. Reabrimos o arquivo para redefinir o arquivo do ponteiro para apontar para o início do arquivo. Crie várias variáveis ​​de strings para lidar com cada palavra separadamente. Imprima as variáveis ​​para ver seu conteúdo. O fscanf () é usado principalmente para extrair e analisar dados de um arquivo.
  3. Reabra o arquivo para redefinir o arquivo de ponteiro para apontar para o início do arquivo. Leia os dados e imprima-os do arquivo caractere por caractere usando a função getc () até que a instrução EOF seja encontrada
  4. Depois de realizar uma operação de leitura de arquivo usando diferentes variantes, fechamos novamente o arquivo usando a função fclose.

Leitura e gravação de arquivos interativos com getc e putc

Essas são as operações de arquivo mais simples. Getc significa get character e putc significa put character. Essas duas funções são usadas para lidar com apenas um único caractere por vez.

O programa a seguir demonstra as funções de manipulação de arquivos na programação 'C':

#include int main() {FILE * fp;char c;printf("File Handling\n");//open a filefp = fopen("demo.txt", "w");//writing operationwhile ((c = getchar()) != EOF) {putc(c, fp);}//close filefclose(fp);printf("Data Entered:\n");//readingfp = fopen("demo.txt", "r");while ((c = getc(fp)) != EOF) {printf("%c", c);}fclose(fp);return 0;}

Resultado:

  1. No programa acima, criamos e abrimos um arquivo chamado demo em modo de escrita.
  2. Depois que uma operação de gravação é realizada, o arquivo é fechado usando a função fclose.
  3. Abrimos novamente um arquivo que agora contém dados em modo de leitura. Um loop while será executado até que o eof seja encontrado. Assim que o fim do arquivo for encontrado, a operação será encerrada e os dados serão exibidos usando a função printf.
  4. Depois de realizar uma operação de leitura, o arquivo é novamente fechado usando a função fclose.

Resumo

  • Um arquivo é um espaço na memória onde os dados são armazenados.
  • A programação 'C' fornece várias funções para lidar com um arquivo.
  • Um mecanismo de manipulação dos arquivos é chamado de gerenciamento de arquivos.
  • Um arquivo deve ser aberto antes de executar operações nele.
  • Um arquivo pode ser aberto em modo de leitura, gravação ou anexo.
  • As funções Getc e putc são usadas para ler e gravar um único caractere.
  • A função fscanf () permite ler e analisar dados de um arquivo
  • Podemos ler (usando a função getc ) um arquivo inteiro fazendo um loop para cobrir todo o arquivo até que o EOF seja encontrado
  • Podemos escrever em um arquivo depois de criar seu nome, usando a função fprintf () e deve ter o caractere de nova linha no final do texto da string.