·
Engenharia Elétrica ·
Introdução à Lógica e Programação
Send your question to AI and receive an answer instantly
Recommended for you
2
Exercícios de Programação com Estruturas de Dados
Introdução à Lógica e Programação
IFSC
29
Linguagem C - Estruturas Definidas pelo Programador - Tutorial e Exercícios
Introdução à Lógica e Programação
IFSC
56
Linguagem C Funções Guia Completo e Estruturação de Código
Introdução à Lógica e Programação
IFSC
37
Linguagem C Ponteiros - Definição Declaração e Utilização
Introdução à Lógica e Programação
IFSC
Preview text
LINGUAGEM C ARQUIVOS Prof André Backes ARQUIVOS Por que usar arquivos Permitem armazenar grande quantidade de informação Persistência dos dados disco Acesso aos dados poder ser não seqüencial Acesso concorrente aos dados mais de um programa pode usar os dados ao mesmo tempo TIPOS DE ARQUIVOS Basicamente a linguagem C trabalha com dois tipos de arquivos de texto e binários Arquivo texto armazena caracteres que podem ser mostrados diretamente na tela ou modificados por um editor de textos simples como o Bloco de Notas Os dados são gravados como caracteres de 8 bits Ex Um número inteiro de 32 bits com 8 dígitos ocupará 64 bits no arquivo 8 bits por dígito TIPOS DE ARQUIVOS Arquivo binário armazena uma seqüência de bits que está sujeita as convenções dos programas que o gerou Ex arquivos executáveis arquivos compactados arquivos de registros etc os dados são gravados na forma binária do mesmo modo que estão na memória Ex um número inteiro de 32 bits com 8 dígitos ocupará 32 bits no arquivo TIPOS DE ARQUIVOS Ex Os dois trechos de arquivo abaixo possuem os mesmo dados MANIPULANDO ARQUIVOS EM C A linguagem C possui uma série de funções para manipulação de arquivos cujos protótipos estão reunidos na biblioteca padrão de estrada e saída stdioh MANIPULANDO ARQUIVOS EM C A linguagem C não possui funções que automaticamente leiam todas as informações de um arquivo Suas funções se limitam a abrirfechar e ler caracteresbytes É tarefa do programador criar a função que lerá um arquivo de uma maneira específica MANIPULANDO ARQUIVOS EM C Todas as funções de manipulação de arquivos trabalham com o conceito de ponteiro de arquivo Podemos declarar um ponteiro de arquivo da seguinte maneira FILE p p é o ponteiro para arquivos que nos permitirá manipular arquivos no C ABRINDO UM ARQUIVO Para a abertura de um arquivo usase a função fopen O parâmetro nomearquivo determina qual arquivo deverá ser aberto sendo que o mesmo deve ser válido no sistema operacional que estiver sendo utilizado ABRINDO UM ARQUIVO No parâmetro nomearquivo podese trabalhar com caminhos absolutos ou relativos Caminho absoluto descrição de um caminho desde o diretório raiz CProjetosdadostxt Caminho relativo descrição de um caminho desde o diretório corrente onde o programa está salvo arqtxt dadostxt ABRINDO UM ARQUIVO O modo de abertura determina que tipo de uso será feito do arquivo A tabela a seguir mostra os modo válidos de abertura de um arquivo ABRINDO UM ARQUIVO Modo Arquivo Função r Texto Leitura Arquivo deve existir w Texto Escrita Cria arquivo se não houver Apaga o anterior se ele existir a Texto Escrita Os dados serão adicionados no fim do arquivo append rb Binário Leitura Arquivo deve existir wb Binário Escrita Cria arquivo se não houver Apaga o anterior se ele existir ab Binário Escrita Os dados serão adicionados no fim do arquivo append r Texto LeituraEscrita O arquivo deve existir e pode ser modificado w Texto LeituraEscrita Cria arquivo se não houver Apaga o anterior se ele existir a Texto LeituraEscrita Os dados serão adicionados no fim do arquivo append rb Binário LeituraEscrita O arquivo deve existir e pode ser modificado wb Binário LeituraEscrita Cria arquivo se não houver Apaga o anterior se ele existir ab Binário LeituraEscrita Os dados serão adicionados no fim do arquivo append ABRINDO UM ARQUIVO Um arquivo binário pode ser aberto para escrita utilizando o seguinte conjunto de comandos A condição fpNULL testa se o arquivo foi aberto com sucesso No caso de erro a função fopen retorna um ponteiro nulo NULL ERRO AO ABRIR UM ARQUIVO Caso o arquivo não tenha sido aberto com sucesso Provavelmente o programa não poderá continuar a executar Nesse caso utilizamos a função exit presente na biblioteca stdlibh para abortar o programa ERRO AO ABRIR UM ARQUIVO A função exit pode ser chamada de qualquer ponto no programa e faz com que o programa termine e retorne para o sistema operacional o códigoderetorno A convenção mais usada é que um programa retorne zero no caso de um término normal um número diferente de zero no caso de ter ocorrido um problema POSIÇÃO DO ARQUIVO Ao se trabalhar com arquivos existe uma espécie de posição onde estamos dentro do arquivo É nessa posição onde será lido ou escrito o próximo caractere Quando utilizando o acesso seqüencial raramente é necessário modificar essa posição Isso por que quando lemos um caractere a posição no arquivo é automaticamente atualizada Leitura e escrita em arquivos são parecidos com escrever em uma máquina de escrever FECHANDO UM ARQUIVO Sempre que terminamos de usar um arquivo que abrimos devemos fechálo Para isso usase a função fclose O ponteiro fp passado à função fclose determina o arquivo a ser fechado A função retorna zero no caso de sucesso FECHANDO UM ARQUIVO Por que devemos fechar o arquivo Ao fechar um arquivo todo caractere que tenha permanecido no buffer é gravado O buffer é uma região de memória que armazena temporariamente os caracteres a serem gravados em disco imediatamente Apenas quando o buffer está cheio é que seu conteúdo é escrito no disco FECHANDO UM ARQUIVO Por que utilizar um buffer Eficiência Para ler e escrever arquivos no disco temos que posicionar a cabeça de gravação em um ponto específico do disco Se tivéssemos que fazer isso para cada caractere lidoescrito a leituraescrita de um arquivo seria uma operação muita lenta Assim a gravação só é realizada quando há um volume razoável de informações a serem gravadas ou quando o arquivo for fechado A função exit fecha todos os arquivos que um programa tiver aberto ESCRITALEITURA EM ARQUIVOS Uma vez aberto um arquivo podemos ler ou escrever nele Para tanto a linguagem C conta com uma série de funções de leituraescrita que variam de funcionalidade para atender as diversas aplicações ESCRITALEITURA DE CARACTERES A maneira mais fácil de se trabalhar com um arquivo é a leituraescrita de um único caractere A função mais básica de entrada de dados é a função fputc put character Cada invocação dessa função grava um único caractere ch no arquivo especificado por fp ESCRITALEITURA DE CARACTERES Exemplo da função fputc ESCRITALEITURA DE CARACTERES A função fputc também pode ser utilizada para escrever um caractere na tela Nesse caso é necessário mudar a variável que aponta para o local onde será gravado o caractere Por exemplo fputc stdout exibe um na tela do monitor dispositivo de saída padrão ESCRITALEITURA DE CARACTERES Da mesma maneira que gravamos um único caractere no arquivo também podemos ler um único caractere A função correspondente de leitura de caracteres é fgetc get character ESCRITALEITURA DE CARACTERES Cada chamada da função fgetc lê um único caractere do arquivo especificado Se fp aponta para um arquivo então fgetcfp lê o caractere atual no arquivo e se posiciona para ler o próximo caractere do arquivo Lembrese a leitura em arquivos é parecida com escrever em uma máquina de escrever ESCRITALEITURA DE CARACTERES Exemplo da função fgetc ESCRITALEITURA DE CARACTERES Similar ao que acontece com a função fputc a função fgetc também pode ser utilizada para a leitura do teclado dispositivo de entrada padrão Nesse caso fgetcstdin lê o próximo caractere digitado no teclado ESCRITALEITURA DE CARACTERES O que acontece quando fgetc tenta ler o próximo caractere de um arquivo que já acabou Precisamos que a função retorne algo indicando o arquivo acabou Porém todos os 256 caracteres são válidos ESCRITALEITURA DE CARACTERES Para evitar esse tipo de situação fgetc não devolve um char mas um int O conjunto de valores do char está contido dentro do conjunto do int Se o arquivo tiver acabado fgetc devolve um valor int que não possa ser confundido com um char ESCRITALEITURA DE CARACTERES Assim se o arquivo não tiver mais caracteres fgetc devolve o valor 1 Mais exatamente fgetc devolve a constante EOF end of file que está definida na biblioteca stdioh Em muitos computadores o valor de EOF é 1 ESCRITALEITURA DE CARACTERES Exemplo de uso do EOF FIM DO ARQUIVO Como visto EOF End of file indica o fim de um arquivo No entanto podemos também utilizar a função feof para verificar se um arquivo chegou ao fim cujo protótipo é No entanto é muito comum fazer mau uso dessa função FIM DO ARQUIVO Um mau uso muito comum da função feof é usála para terminar um loop Mas por que isso é um mau uso FIM DO ARQUIVO Vamos ver a descrição da função feof A função feof testa o indicador de fim de arquivo para o fluxo apontado por fp A função retona um valor inteiro diferente de zero se e somente se o indicador de fim de arquivo está marcado para fp Ou seja a função testa o indicador de fim de arquivo não o próprio arquivo FIM DO ARQUIVO Isso significa que outra função é responsável por alterar o indicador para indicar que o EOF foi alcançado A maioria das funções de leitura irá alterar o indicador após ler todos os dados e então realizar uma nova leitura resultando em nenhum dado apenas o EOF Como resolver isso devemos evitar o uso da função feof para testar um loop e usála para testar se uma leitura alterou o indicador de fim de arquivo FIM DO ARQUIVO Para entender esse problema do mau uso da funções feof considere que queiramos ler todos os números contidos em um arquivo texto como o mostrado abaixo Clique para editar o texto mestre Clique para editar o texto mestre FIM DO ARQUIVO Mau uso da função feof Bom uso da função feof ARQUIVOS PRÉDEFINIDOS Como visto anteriormente os ponteiros stdin e stdout podem ser utilizados para acessar os dispositivo de entrada geralmente o teclado e saída geralmente o vídeo padrão Na verdade no início da execução de um programa o sistema automaticamente abre alguns arquivos prédefinidos entre eles stdin e stdout ARQUIVOS PRÉDEFINIDOS Alguns arquivos prédefinidos stdin dispositivo de entrada padrão geralmente o teclado stdout dispositivo de saída padrão geralmente o vídeo stderr dispositivo de saída de erro padrão geralmente o vídeo stdaux dispositivo de saída auxiliar em muitos sistemas associado à porta serial stdprn dispositivo de impressão padrão em muitos sistemas associado à porta paralela ESCRITALEITURA DE STRINGS Até o momento apenas caracteres isolados puderam ser escritos em um arquivo Porém existem funções na linguagem C que permitem lerescrever uma seqüência de caracteres isto é uma string fputs fgets ESCRITALEITURA DE STRINGS Basicamente para se escrever uma string em um arquivo usamos a função fputs Esta função recebe como parâmetro um array de caracteres string e um ponteiro para o arquivo no qual queremos escrever ESCRITALEITURA DE STRINGS Retorno da função Se o texto for escrito com sucesso um valor inteiro diferente de zero é retornado Se houver erro na escrita o valor EOF é retornado Como a função fputc fputs também pode ser utilizada para escrever uma string na tela ESCRITALEITURA DE STRINGS Exemplo da função fputs ESCRITALEITURA DE STRINGS Da mesma maneira que gravamos uma cadeia de caracteres no arquivo a sua leitura também é possível Para se ler uma string de um arquivo podemos usar a função fgets cujo protótipo é ESCRITALEITURA DE STRINGS A função fgets recebe 3 parâmetros str aonde a lida será armazenada str tamanho o número máximo de caracteres a serem lidos fp ponteiro que está associado ao arquivo de onde a string será lida E retorna NULL em caso de erro ou fim do arquivo O ponteiro para o primeiro caractere recuperado em str ESCRITALEITURA DE STRINGS Funcionamento da função fgets A função lê a string até que um caractere de nova linha seja lido ou tamanho1 caracteres tenham sido lidos Se o caractere de nova linha for lido ele fará parte da string o que não acontecia com gets A string resultante sempre terminará com 0 por isto somente tamanho1 caracteres no máximo serão lidos Se ocorrer algum erro a função devolverá um ponteiro nulo em str ESCRITALEITURA DE STRINGS A função fgets é semelhante à função gets porém com as seguintes vantagens Pode fazer a leitura a partir de um arquivo de dados e incluir o caractere de nova linha na string Específica o tamanho máximo da string de entrada Isso evita estouro no buffer ESCRITALEITURA DE STRINGS Exemplo da função fgets ESCRITALEITURA DE STRINGS Vale lembrar que o ponteiro fp pode ser substituído por stdin para se fazer a leitura do teclado ESCRITALEITURA DE BLOCO DE DADOS Além da leituraescrita de caracteres e seqüências de caracteres podemos lerescrever blocos de dados Para tanto temos duas funções fwrite fread ESCRITALEITURA DE BLOCO DE DADOS A função fwrite é responsável pela escrita de um bloco de dados da memória em um arquivo Seu protótipo é ESCRITALEITURA DE BLOCO DE DADOS A função fwrite recebe 4 argumentos buffer ponteiro para a região de memória na qual estão os dados numerodebytes tamanho de cada posição de memória a ser escrita count total de unidades de memória que devem ser escritas fp ponteiro associado ao arquivo onde os dados serão escritos ESCRITALEITURA DE BLOCO DE DADOS Note que temos dois valores numéricos numerodebytes count Isto significa que o número total de bytes escritos é numerodebytes count Como retorno temos o número de unidades efetivamente escritas Este número pode ser menor que count quando ocorrer algum erro ESCRITALEITURA DE BLOCO DE DADOS Exemplo da função fwrite ESCRITALEITURA DE BLOCO DE DADOS A função fread é responsável pela leitura de um bloco de dados de um arquivo Seu protótipo é ESCRITALEITURA DE BLOCO DE DADOS A função fread funciona como a sua companheira fwrite porém lendo dados do arquivo Como na função fwrite fread retorna o número de itens escritos Este valor será igual a count a menos que ocorra algum erro ESCRITALEITURA DE BLOCO DE DADOS Exemplo da função fread ESCRITALEITURA DE BLOCO DE DADOS Quando o arquivo for aberto para dados binários fwrite e fread podem manipular qualquer tipo de dado int float double array struct etc ESCRITALEITURA POR FLUXO PADRÃO As funções de fluxos padrão permitem ao programador ler e escrever em arquivos da maneira padrão com a qual o já líamos e escrevíamos na tela As funções fprintf e fscanf funcionam de maneiras semelhantes a printf e scanf respectivamente A diferença é que elas direcionam os dados para arquivos ESCRITALEITURA POR FLUXO PADRÃO Ex fprintf Ex fscanf ESCRITALEITURA POR FLUXO PADRÃO Atenção Embora fprintf e fscanf sejam mais fáceis de lerescrever dados em arquivos nem sempre elas são as escolhas mais apropriadas Como os dados são escritos em ASCII e formatados como apareceriam em tela um tempo extra é perdido Se a intenção é velocidade ou tamanho do arquivo devese utilizar as funções fread e fwrite ESCRITALEITURA POR FLUXO PADRÃO Exemplo da funções fprintf ESCRITALEITURA POR FLUXO PADRÃO Exemplo da funções fscanf MOVENDOSE PELO ARQUIVO De modo geral o acesso a um arquivo é seqüencial Porém é possível fazer buscas e acessos randômicos em arquivos Para isso existe a função fseek Basicamente esta função move a posição corrente de leitura ou escrita no arquivo em tantos bytes a partir de um ponto especificado MOVENDOSE PELO ARQUIVO A função fseek recebe 3 parâmetros fp o ponteiro para o arquivo numbytes é o total de bytes a partir de origem a ser pulado origem determina a partir de onde os numbytes de movimentação serão contados A função devolve o valor 0 quando bem sucedida Os valores possíveis para origem são definidos por macros em stdioh e são Portanto para mover numbytes a partir do início do arquivo origem deve ser SEEKSET da posição atual origem deve ser SEEKCUR do final do arquivo origem deve ser SEEKEND numbytes pode ser negativo quando usado com SEEKCUR e SEEKEND Nome Valor Significado SEEKSET 0 Início do arquivo SEEKCUR 1 Ponto corrente do arquivo SEEKEND 2 Fim do arquivo MOVENDOSE PELO ARQUIVO MOVENDOSE PELO ARQUIVO Exemplo da função fseek MOVENDOSE PELO ARQUIVO Outra opção de movimentação pelo arquivo é simplesmente retornar para o seu início Para tanto usase a função rewind APAGANDO UM ARQUIVO Além de permitir manipular arquivos a linguagem C também permite apagálo do disco Isso pode ser feito utilizando a função remove Diferente das funções vistas até aqui esta função recebe o caminho e nome do arquivo a ser excluído e não um ponteiro para FILE Como retorno temos um valor inteiro o qual será igual a 0 se o arquivo for excluído com sucesso APAGANDO UM ARQUIVO Exemplo da função remove MATERIAL COMPLEMENTAR Vídeo Aulas Aula 66 Arquivos pt1 Introdução Aula 67 Arquivos pt2 Arquivos Texto e Binário Aula 68 Arquivos pt3 Abrir e Fechar Aula 69 Arquivos pt4 fputc Aula 70 Arquivos pt5 fgetc Aula 71 Arquivos pt6 Trabalhando com Arquivos Aula 72 Arquivos pt7 EOF contém erros Aula 73 Arquivos pt8 fputs Aula 74 Arquivos pt9 fgets Aula 75 Arquivos pt10 fwrite Aula 76 Arquivos pt11 fread Aula 77 Arquivos pt12 fprintf Aula 78 Arquivos pt13 fscanf Aula 79 Arquivos pt14 fseek e rewind Aula 90 Mau uso da função FEOF
Send your question to AI and receive an answer instantly
Recommended for you
2
Exercícios de Programação com Estruturas de Dados
Introdução à Lógica e Programação
IFSC
29
Linguagem C - Estruturas Definidas pelo Programador - Tutorial e Exercícios
Introdução à Lógica e Programação
IFSC
56
Linguagem C Funções Guia Completo e Estruturação de Código
Introdução à Lógica e Programação
IFSC
37
Linguagem C Ponteiros - Definição Declaração e Utilização
Introdução à Lógica e Programação
IFSC
Preview text
LINGUAGEM C ARQUIVOS Prof André Backes ARQUIVOS Por que usar arquivos Permitem armazenar grande quantidade de informação Persistência dos dados disco Acesso aos dados poder ser não seqüencial Acesso concorrente aos dados mais de um programa pode usar os dados ao mesmo tempo TIPOS DE ARQUIVOS Basicamente a linguagem C trabalha com dois tipos de arquivos de texto e binários Arquivo texto armazena caracteres que podem ser mostrados diretamente na tela ou modificados por um editor de textos simples como o Bloco de Notas Os dados são gravados como caracteres de 8 bits Ex Um número inteiro de 32 bits com 8 dígitos ocupará 64 bits no arquivo 8 bits por dígito TIPOS DE ARQUIVOS Arquivo binário armazena uma seqüência de bits que está sujeita as convenções dos programas que o gerou Ex arquivos executáveis arquivos compactados arquivos de registros etc os dados são gravados na forma binária do mesmo modo que estão na memória Ex um número inteiro de 32 bits com 8 dígitos ocupará 32 bits no arquivo TIPOS DE ARQUIVOS Ex Os dois trechos de arquivo abaixo possuem os mesmo dados MANIPULANDO ARQUIVOS EM C A linguagem C possui uma série de funções para manipulação de arquivos cujos protótipos estão reunidos na biblioteca padrão de estrada e saída stdioh MANIPULANDO ARQUIVOS EM C A linguagem C não possui funções que automaticamente leiam todas as informações de um arquivo Suas funções se limitam a abrirfechar e ler caracteresbytes É tarefa do programador criar a função que lerá um arquivo de uma maneira específica MANIPULANDO ARQUIVOS EM C Todas as funções de manipulação de arquivos trabalham com o conceito de ponteiro de arquivo Podemos declarar um ponteiro de arquivo da seguinte maneira FILE p p é o ponteiro para arquivos que nos permitirá manipular arquivos no C ABRINDO UM ARQUIVO Para a abertura de um arquivo usase a função fopen O parâmetro nomearquivo determina qual arquivo deverá ser aberto sendo que o mesmo deve ser válido no sistema operacional que estiver sendo utilizado ABRINDO UM ARQUIVO No parâmetro nomearquivo podese trabalhar com caminhos absolutos ou relativos Caminho absoluto descrição de um caminho desde o diretório raiz CProjetosdadostxt Caminho relativo descrição de um caminho desde o diretório corrente onde o programa está salvo arqtxt dadostxt ABRINDO UM ARQUIVO O modo de abertura determina que tipo de uso será feito do arquivo A tabela a seguir mostra os modo válidos de abertura de um arquivo ABRINDO UM ARQUIVO Modo Arquivo Função r Texto Leitura Arquivo deve existir w Texto Escrita Cria arquivo se não houver Apaga o anterior se ele existir a Texto Escrita Os dados serão adicionados no fim do arquivo append rb Binário Leitura Arquivo deve existir wb Binário Escrita Cria arquivo se não houver Apaga o anterior se ele existir ab Binário Escrita Os dados serão adicionados no fim do arquivo append r Texto LeituraEscrita O arquivo deve existir e pode ser modificado w Texto LeituraEscrita Cria arquivo se não houver Apaga o anterior se ele existir a Texto LeituraEscrita Os dados serão adicionados no fim do arquivo append rb Binário LeituraEscrita O arquivo deve existir e pode ser modificado wb Binário LeituraEscrita Cria arquivo se não houver Apaga o anterior se ele existir ab Binário LeituraEscrita Os dados serão adicionados no fim do arquivo append ABRINDO UM ARQUIVO Um arquivo binário pode ser aberto para escrita utilizando o seguinte conjunto de comandos A condição fpNULL testa se o arquivo foi aberto com sucesso No caso de erro a função fopen retorna um ponteiro nulo NULL ERRO AO ABRIR UM ARQUIVO Caso o arquivo não tenha sido aberto com sucesso Provavelmente o programa não poderá continuar a executar Nesse caso utilizamos a função exit presente na biblioteca stdlibh para abortar o programa ERRO AO ABRIR UM ARQUIVO A função exit pode ser chamada de qualquer ponto no programa e faz com que o programa termine e retorne para o sistema operacional o códigoderetorno A convenção mais usada é que um programa retorne zero no caso de um término normal um número diferente de zero no caso de ter ocorrido um problema POSIÇÃO DO ARQUIVO Ao se trabalhar com arquivos existe uma espécie de posição onde estamos dentro do arquivo É nessa posição onde será lido ou escrito o próximo caractere Quando utilizando o acesso seqüencial raramente é necessário modificar essa posição Isso por que quando lemos um caractere a posição no arquivo é automaticamente atualizada Leitura e escrita em arquivos são parecidos com escrever em uma máquina de escrever FECHANDO UM ARQUIVO Sempre que terminamos de usar um arquivo que abrimos devemos fechálo Para isso usase a função fclose O ponteiro fp passado à função fclose determina o arquivo a ser fechado A função retorna zero no caso de sucesso FECHANDO UM ARQUIVO Por que devemos fechar o arquivo Ao fechar um arquivo todo caractere que tenha permanecido no buffer é gravado O buffer é uma região de memória que armazena temporariamente os caracteres a serem gravados em disco imediatamente Apenas quando o buffer está cheio é que seu conteúdo é escrito no disco FECHANDO UM ARQUIVO Por que utilizar um buffer Eficiência Para ler e escrever arquivos no disco temos que posicionar a cabeça de gravação em um ponto específico do disco Se tivéssemos que fazer isso para cada caractere lidoescrito a leituraescrita de um arquivo seria uma operação muita lenta Assim a gravação só é realizada quando há um volume razoável de informações a serem gravadas ou quando o arquivo for fechado A função exit fecha todos os arquivos que um programa tiver aberto ESCRITALEITURA EM ARQUIVOS Uma vez aberto um arquivo podemos ler ou escrever nele Para tanto a linguagem C conta com uma série de funções de leituraescrita que variam de funcionalidade para atender as diversas aplicações ESCRITALEITURA DE CARACTERES A maneira mais fácil de se trabalhar com um arquivo é a leituraescrita de um único caractere A função mais básica de entrada de dados é a função fputc put character Cada invocação dessa função grava um único caractere ch no arquivo especificado por fp ESCRITALEITURA DE CARACTERES Exemplo da função fputc ESCRITALEITURA DE CARACTERES A função fputc também pode ser utilizada para escrever um caractere na tela Nesse caso é necessário mudar a variável que aponta para o local onde será gravado o caractere Por exemplo fputc stdout exibe um na tela do monitor dispositivo de saída padrão ESCRITALEITURA DE CARACTERES Da mesma maneira que gravamos um único caractere no arquivo também podemos ler um único caractere A função correspondente de leitura de caracteres é fgetc get character ESCRITALEITURA DE CARACTERES Cada chamada da função fgetc lê um único caractere do arquivo especificado Se fp aponta para um arquivo então fgetcfp lê o caractere atual no arquivo e se posiciona para ler o próximo caractere do arquivo Lembrese a leitura em arquivos é parecida com escrever em uma máquina de escrever ESCRITALEITURA DE CARACTERES Exemplo da função fgetc ESCRITALEITURA DE CARACTERES Similar ao que acontece com a função fputc a função fgetc também pode ser utilizada para a leitura do teclado dispositivo de entrada padrão Nesse caso fgetcstdin lê o próximo caractere digitado no teclado ESCRITALEITURA DE CARACTERES O que acontece quando fgetc tenta ler o próximo caractere de um arquivo que já acabou Precisamos que a função retorne algo indicando o arquivo acabou Porém todos os 256 caracteres são válidos ESCRITALEITURA DE CARACTERES Para evitar esse tipo de situação fgetc não devolve um char mas um int O conjunto de valores do char está contido dentro do conjunto do int Se o arquivo tiver acabado fgetc devolve um valor int que não possa ser confundido com um char ESCRITALEITURA DE CARACTERES Assim se o arquivo não tiver mais caracteres fgetc devolve o valor 1 Mais exatamente fgetc devolve a constante EOF end of file que está definida na biblioteca stdioh Em muitos computadores o valor de EOF é 1 ESCRITALEITURA DE CARACTERES Exemplo de uso do EOF FIM DO ARQUIVO Como visto EOF End of file indica o fim de um arquivo No entanto podemos também utilizar a função feof para verificar se um arquivo chegou ao fim cujo protótipo é No entanto é muito comum fazer mau uso dessa função FIM DO ARQUIVO Um mau uso muito comum da função feof é usála para terminar um loop Mas por que isso é um mau uso FIM DO ARQUIVO Vamos ver a descrição da função feof A função feof testa o indicador de fim de arquivo para o fluxo apontado por fp A função retona um valor inteiro diferente de zero se e somente se o indicador de fim de arquivo está marcado para fp Ou seja a função testa o indicador de fim de arquivo não o próprio arquivo FIM DO ARQUIVO Isso significa que outra função é responsável por alterar o indicador para indicar que o EOF foi alcançado A maioria das funções de leitura irá alterar o indicador após ler todos os dados e então realizar uma nova leitura resultando em nenhum dado apenas o EOF Como resolver isso devemos evitar o uso da função feof para testar um loop e usála para testar se uma leitura alterou o indicador de fim de arquivo FIM DO ARQUIVO Para entender esse problema do mau uso da funções feof considere que queiramos ler todos os números contidos em um arquivo texto como o mostrado abaixo Clique para editar o texto mestre Clique para editar o texto mestre FIM DO ARQUIVO Mau uso da função feof Bom uso da função feof ARQUIVOS PRÉDEFINIDOS Como visto anteriormente os ponteiros stdin e stdout podem ser utilizados para acessar os dispositivo de entrada geralmente o teclado e saída geralmente o vídeo padrão Na verdade no início da execução de um programa o sistema automaticamente abre alguns arquivos prédefinidos entre eles stdin e stdout ARQUIVOS PRÉDEFINIDOS Alguns arquivos prédefinidos stdin dispositivo de entrada padrão geralmente o teclado stdout dispositivo de saída padrão geralmente o vídeo stderr dispositivo de saída de erro padrão geralmente o vídeo stdaux dispositivo de saída auxiliar em muitos sistemas associado à porta serial stdprn dispositivo de impressão padrão em muitos sistemas associado à porta paralela ESCRITALEITURA DE STRINGS Até o momento apenas caracteres isolados puderam ser escritos em um arquivo Porém existem funções na linguagem C que permitem lerescrever uma seqüência de caracteres isto é uma string fputs fgets ESCRITALEITURA DE STRINGS Basicamente para se escrever uma string em um arquivo usamos a função fputs Esta função recebe como parâmetro um array de caracteres string e um ponteiro para o arquivo no qual queremos escrever ESCRITALEITURA DE STRINGS Retorno da função Se o texto for escrito com sucesso um valor inteiro diferente de zero é retornado Se houver erro na escrita o valor EOF é retornado Como a função fputc fputs também pode ser utilizada para escrever uma string na tela ESCRITALEITURA DE STRINGS Exemplo da função fputs ESCRITALEITURA DE STRINGS Da mesma maneira que gravamos uma cadeia de caracteres no arquivo a sua leitura também é possível Para se ler uma string de um arquivo podemos usar a função fgets cujo protótipo é ESCRITALEITURA DE STRINGS A função fgets recebe 3 parâmetros str aonde a lida será armazenada str tamanho o número máximo de caracteres a serem lidos fp ponteiro que está associado ao arquivo de onde a string será lida E retorna NULL em caso de erro ou fim do arquivo O ponteiro para o primeiro caractere recuperado em str ESCRITALEITURA DE STRINGS Funcionamento da função fgets A função lê a string até que um caractere de nova linha seja lido ou tamanho1 caracteres tenham sido lidos Se o caractere de nova linha for lido ele fará parte da string o que não acontecia com gets A string resultante sempre terminará com 0 por isto somente tamanho1 caracteres no máximo serão lidos Se ocorrer algum erro a função devolverá um ponteiro nulo em str ESCRITALEITURA DE STRINGS A função fgets é semelhante à função gets porém com as seguintes vantagens Pode fazer a leitura a partir de um arquivo de dados e incluir o caractere de nova linha na string Específica o tamanho máximo da string de entrada Isso evita estouro no buffer ESCRITALEITURA DE STRINGS Exemplo da função fgets ESCRITALEITURA DE STRINGS Vale lembrar que o ponteiro fp pode ser substituído por stdin para se fazer a leitura do teclado ESCRITALEITURA DE BLOCO DE DADOS Além da leituraescrita de caracteres e seqüências de caracteres podemos lerescrever blocos de dados Para tanto temos duas funções fwrite fread ESCRITALEITURA DE BLOCO DE DADOS A função fwrite é responsável pela escrita de um bloco de dados da memória em um arquivo Seu protótipo é ESCRITALEITURA DE BLOCO DE DADOS A função fwrite recebe 4 argumentos buffer ponteiro para a região de memória na qual estão os dados numerodebytes tamanho de cada posição de memória a ser escrita count total de unidades de memória que devem ser escritas fp ponteiro associado ao arquivo onde os dados serão escritos ESCRITALEITURA DE BLOCO DE DADOS Note que temos dois valores numéricos numerodebytes count Isto significa que o número total de bytes escritos é numerodebytes count Como retorno temos o número de unidades efetivamente escritas Este número pode ser menor que count quando ocorrer algum erro ESCRITALEITURA DE BLOCO DE DADOS Exemplo da função fwrite ESCRITALEITURA DE BLOCO DE DADOS A função fread é responsável pela leitura de um bloco de dados de um arquivo Seu protótipo é ESCRITALEITURA DE BLOCO DE DADOS A função fread funciona como a sua companheira fwrite porém lendo dados do arquivo Como na função fwrite fread retorna o número de itens escritos Este valor será igual a count a menos que ocorra algum erro ESCRITALEITURA DE BLOCO DE DADOS Exemplo da função fread ESCRITALEITURA DE BLOCO DE DADOS Quando o arquivo for aberto para dados binários fwrite e fread podem manipular qualquer tipo de dado int float double array struct etc ESCRITALEITURA POR FLUXO PADRÃO As funções de fluxos padrão permitem ao programador ler e escrever em arquivos da maneira padrão com a qual o já líamos e escrevíamos na tela As funções fprintf e fscanf funcionam de maneiras semelhantes a printf e scanf respectivamente A diferença é que elas direcionam os dados para arquivos ESCRITALEITURA POR FLUXO PADRÃO Ex fprintf Ex fscanf ESCRITALEITURA POR FLUXO PADRÃO Atenção Embora fprintf e fscanf sejam mais fáceis de lerescrever dados em arquivos nem sempre elas são as escolhas mais apropriadas Como os dados são escritos em ASCII e formatados como apareceriam em tela um tempo extra é perdido Se a intenção é velocidade ou tamanho do arquivo devese utilizar as funções fread e fwrite ESCRITALEITURA POR FLUXO PADRÃO Exemplo da funções fprintf ESCRITALEITURA POR FLUXO PADRÃO Exemplo da funções fscanf MOVENDOSE PELO ARQUIVO De modo geral o acesso a um arquivo é seqüencial Porém é possível fazer buscas e acessos randômicos em arquivos Para isso existe a função fseek Basicamente esta função move a posição corrente de leitura ou escrita no arquivo em tantos bytes a partir de um ponto especificado MOVENDOSE PELO ARQUIVO A função fseek recebe 3 parâmetros fp o ponteiro para o arquivo numbytes é o total de bytes a partir de origem a ser pulado origem determina a partir de onde os numbytes de movimentação serão contados A função devolve o valor 0 quando bem sucedida Os valores possíveis para origem são definidos por macros em stdioh e são Portanto para mover numbytes a partir do início do arquivo origem deve ser SEEKSET da posição atual origem deve ser SEEKCUR do final do arquivo origem deve ser SEEKEND numbytes pode ser negativo quando usado com SEEKCUR e SEEKEND Nome Valor Significado SEEKSET 0 Início do arquivo SEEKCUR 1 Ponto corrente do arquivo SEEKEND 2 Fim do arquivo MOVENDOSE PELO ARQUIVO MOVENDOSE PELO ARQUIVO Exemplo da função fseek MOVENDOSE PELO ARQUIVO Outra opção de movimentação pelo arquivo é simplesmente retornar para o seu início Para tanto usase a função rewind APAGANDO UM ARQUIVO Além de permitir manipular arquivos a linguagem C também permite apagálo do disco Isso pode ser feito utilizando a função remove Diferente das funções vistas até aqui esta função recebe o caminho e nome do arquivo a ser excluído e não um ponteiro para FILE Como retorno temos um valor inteiro o qual será igual a 0 se o arquivo for excluído com sucesso APAGANDO UM ARQUIVO Exemplo da função remove MATERIAL COMPLEMENTAR Vídeo Aulas Aula 66 Arquivos pt1 Introdução Aula 67 Arquivos pt2 Arquivos Texto e Binário Aula 68 Arquivos pt3 Abrir e Fechar Aula 69 Arquivos pt4 fputc Aula 70 Arquivos pt5 fgetc Aula 71 Arquivos pt6 Trabalhando com Arquivos Aula 72 Arquivos pt7 EOF contém erros Aula 73 Arquivos pt8 fputs Aula 74 Arquivos pt9 fgets Aula 75 Arquivos pt10 fwrite Aula 76 Arquivos pt11 fread Aula 77 Arquivos pt12 fprintf Aula 78 Arquivos pt13 fscanf Aula 79 Arquivos pt14 fseek e rewind Aula 90 Mau uso da função FEOF