·
Engenharia Mecânica ·
Linguagens de Programação
Envie sua pergunta para a IA e receba a resposta na hora
Recomendado para você
32
Linguagem C: Fundamentos de Sistemas de Computadores e Tipos de Arquivos
Linguagens de Programação
CEFET/RJ
39
Structs e Unions em C: Estruturas de Dados Compostas - Fundamentos e Exemplos
Linguagens de Programação
CEFET/RJ
39
Structs e Unions em C: Fundamentos de Estruturas de Dados Compostos
Linguagens de Programação
CEFET/RJ
39
Structs e Unions em C: Fundamentos de Estruturas de Dados Compostas
Linguagens de Programação
CEFET/RJ
7
Exploração do Firebase Cloud Messaging com Flutter
Linguagens de Programação
CEFET/RJ
Texto de pré-visualização
Linguagem C Prof Almir Silveira CEFET jul 17 Fundamentos Sistemas de Computadores Arquivos 1 Linguagem C Prof Almir Silveira CEFET jul 17 Fundamentos Sistemas de Computadores Tipos de Arquivos Tipos de arquivo Sequencial texto Caracteres armazenadas sequencialmente É possível determinar o primeiro segundo terceiro caracteres que compõem o arquivo Composto apenas de caracteres organizados em linhas de no máximo 255 caracteres Cada linha é terminada com um caractere de fim de linha ex CRLF no DOS Binário Formado por uma sequência de bytes sem correspondência com um tipo de dado Cabe ao programador fazer esta correspondência quando lê e escreve estes arquivos Qualquer tipo de dado incluindo texto Bytes de dados em um stream binário não são traduzidos ou interpretados de forma diferente Por exemplo no modo texto a combinação dos caracteres correspondentes ao carriage return CR e line feed LF em um arquivo são interpretados como um ao imprimir na tela Em modo binário não recebem tratamento específico sendo impresso os caracteres especiais como parte da mesma linha 2 Linguagem C Prof Almir Silveira CEFET jul 17 Fundamentos Sistemas de Computadores 3 Antes de acessar os dados dentro de um arquivo é necessário abri lo Executase as operações desejadas com o arquivos usando funções específicas para leitura e escrita Ao terminar de realizar as operações no arquivo devemos fechálo As operações de abertura e fechamento garantem a integridade dos dados As funções referentes a arquivos requerem a inclusão do stdioh e todo arquivo aberto é referenciado por um ponteiro para o tipo FILE Como trabalhar com arquivos Linguagem C Prof Almir Silveira CEFET jul 17 Fundamentos Sistemas de Computadores Descritor de arquivos 4 Arquivo lógico na memória Disco Memória Em C Estrutura de dados denominada FILE Aponta para um arquivo físico no disco O arquivo lógico é armazenado em variáveis de memória definidas pelo programador Todas operações feitas pelo descritor refletem no arquivo Criando um descritor FILE arq arquivotxt Arq Descritor de Arquivo FILE Arquivo Físico Linguagem C Prof Almir Silveira CEFET jul 17 Fundamentos Sistemas de Computadores 5 Arq Vantagens Desvantagens T E X T O Facilidade de leitura os dados podem ser lidos por qualquer programa caractere por caractere Maior gasto de memória gasta 1 byte por caractere exigindo por exemplo 10 bytes para armazenar o número 123456789 que gastaria 4 bytes em um float Maior gasto de tempo em buscas para acessar o nésimo elemento exige uma busca sequencial acessando todos os elementos anteriores no arquivo B I N Á R I O Menor gasto de memória similar à forma como é armazenado em memória RAM onde o número 123456789 gastaria 4 bytes equivalente a um float Menor gasto de tempo em buscas para saber a posição do nésimo número fracionário de uma lista de números fracionários bastaria localizar a posição nsizeoffloat movendo o cursor do arquivo Dificuldade de leitura apenas o criador do arquivo sabe como manipulálo Linguagem C Prof Almir Silveira CEFET jul 17 Fundamentos Sistemas de Computadores 6 A função fopen tem duas finalidades abrir uma descritor de bytes ligar um arquivo em disco àquele descritor FILE fopenchar NomeArquivo char modo nome arquivo nome do arquivo com ou sem o caminho a ser aberto modo modo de abertura do arquivo controlando se é arquivo texto ou binário para leitura escrita ou ambos Os possíveis modos de abertura de um arquivo são mostrados na tabela a seguir Abrindo arquivos include stdioh int main FILE arquivo arquivo fopen aulatxt r if arquivo NULL printf Arquivo aberto com sucesso fclose arquivo else printf Nco foi posscvel abrir o arquivo134161 return0 Cap10Prog01 Linguagem C Prof Almir Silveira CEFET jul 17 Fundamentos Sistemas de Computadores 7 Outro exemplo FILE parquivo char nome textotxt if parquivo fopennome wb NULL printf Nao foi possivel abrir o arquivo para escrita exit1 Abrindo arquivos Funciona como o printf exceto pelo fato de que envia a saída para o stream e não para o monito Não funciona para arquivos binários pois converte os dados em texto É necessário usar a função fwrite FILE arq arq fopenatxt w fprintfarq ddd 2 5 2006 escreve no arquivo texto252006 fclosearq Sintaxe da função int fprintfFILE arquivo char formatocaracteres Linguagem C Prof Almir Silveira CEFET jul 17 Fundamentos Sistemas de Computadores 8 Modo Significado r Abre Arquivo de Texto para Leitura w Cria Arquivo de Texto para Gravação a Anexa a um Arquivo de Texto rb Abre Arquivo Binário para Leitura wb Cria Arquivo Binário para Gravação ab Anexa a um Arquivo Binário r Abre Arquivo de Texto para LeituraGravação w Cria Arquivo de Texto para LeituraGravação a Abre ou Cria Arquivo de Texto para LeituraGravação rb Abre Arquivo Binário para LeituraGravação wb Cria Arquivo Binário para LeituraGravação ab Abre ou Cria Arquivo Binário para LeituraGravação Linguagem C Prof Almir Silveira CEFET jul 17 Fundamentos Sistemas de Computadores 9 fwrite para arquivos binários Recebe 4 parâmetros um ponteiro para o vetor em memória o tamanho de cada elemento do vetor o número de elementos do vetor e a variável associada ao arquivo Sintaxe da função int fwritechar vet int tam int num FILE arquivo for i0i5i printfd veti for i0i5i printf Digite valores inteiro scanfdveti arq1 fopenfarq1datwb fwritevet sizeof int 5 arq1 fclose arq1 arq1 fopenfarq1datrb freadvet sizeofint 5 arq1 copia os dez inteiros do arquivo para o vetor fclosearq1 for i0i5i printfd veti return0 include stdioh int main FILE arq1 int i int vet5 0 1 2 3 4 arq1 fopenfarq1datwb fwritevet sizeof int 5 arq1 fclose arq1 arq1 fopen farq1dat rb freadvet sizeofint 5 arq1 copia os cinco inteiros do arquivo para o vetor fclosearq1 Cap10Prog02 Linguagem C Prof Almir Silveira CEFET jul 17 Fundamentos Sistemas de Computadores 10 C provê funções para ler caracteres linhas de texto padrões formatados ou vetores de bytes int getcFILE arquivo lê um caracter do arquivo e retorna seu valor como inteiro Retorna EOF em caso de erro int fgetcFILE f lê um byte retorna seu valor 0255 como inteiro Retorna EOF em caso de erro char fgetschar dest int limite FILE f lê uma linha de texto ou até atingir o limite de bytes lidos e guarda o texto lido em dest Retorna dest em caso de sucesso NULL em caso de erro Scanf para arquivos int fscanfFILE f char formato lê numelem elementos de tamelem bytes cada e armazena em dados Retorna o número de elementos lidos com sucesso int freadvoid dados int tamelem int numelem FILE f Linguagem C Prof Almir Silveira CEFET jul 17 Fundamentos Sistemas de Computadores 11 C provê funções para ler caracteres linhas de texto padrões formatados ou vetores de bytes int getcFILE arquivo lê um caracter do arquivo e retorna seu valor como inteiro Retorna EOF em caso de erro int fgetcFILE f lê um byte retorna seu valor 0255 como inteiro Retorna EOF em caso de erro char fgetschar dest int limite FILE f lê uma linha de texto ou até atingir o limite de bytes lidos e guarda o texto lido em dest Retorna dest em caso de sucesso NULL em caso de erro int fscanfFILE f char formato scanf para arquivos int freadvoid dados int tamelem int numelem FILE f lê numelem elementos de tamelem bytes cada e armazena em dados Retorna o número de elementos lidos com sucesso Linguagem C Prof Almir Silveira CEFET jul 17 Fundamentos Sistemas de Computadores 12 fscanf para arquivos texto Funciona como o scanf exceto pelo fato de que lê do arquivo e não do teclado Sintaxe da função int fscanfFILE arquivo char formatocaracteres include stdioh include conioh include ctypeh include stdlibh int main int dia mes ano FILE arq arq fopen arq1txt r if arq NULL perror Erro abrindo arquivo else fscanf arq ddd dia mes ano fscanf arq d dia fscanf arq d mes fscanf arq d ano printf d d ddia mes ano fclosearq return0 Cap10Prog03 Linguagem C Prof Almir Silveira CEFET jul 17 Fundamentos Sistemas de Computadores 13 fread para arquivos binários Sintaxe da função int freadchar vet int tam int num FILE arquivo include stdioh include conioh include ctypeh include stdlibh int main FILE arq1 int i int vet5 0 1 2 3 4 arq1 fopenfarq1datwb fwritevet sizeof int 5 arq1 copia os cinco inteiros do vetor para o arquivo fclose arq1 arq1 fopen farq1dat rb freadvet sizeofint 5 arq1 copia os cinco inteiros do arquivo para o vetor fclosearq1 for i0i5i printfd veti return0 Cap10Prog04 Linguagem C Prof Almir Silveira CEFET jul 17 Fundamentos Sistemas de Computadores 14 getc e fgetc para arquivos texto Funções idênticas Devolvem o caracter apontado pelo ponteiro FILE ou EOF end of file em um erro Sintaxe da função char fgetcFILE arquivo include stdioh include stdlibh int main int cnlinhas1 FILE arq arqfopenaulatxt r if arqNULL printfNao foi possivel abrir o arquivo exit1 Cap10Prog05 While cfgetc arqEOF putcharc if c nlinhas fclosearq fecha o arquivo exibe o resultado na tela printf nNumero de linhas d nlinhas return 0 Linguagem C Prof Almir Silveira CEFET jul 17 Fundamentos Sistemas de Computadores 15 fgets para arquivos Para ter uma linha de caracteres do arquivo Sintaxe da função char fgetschar string int tamanho FILE arquivo mostra linhas de arquivo de texto include stdioh include stdlibh int main char linha41 FILE arq arqfopenaulatxt rt abre o arquivo if arqNULL printfNão foi possível abrir o arquivo systempause exit1 whilefgetslinha 40 arq NULL le uma linha inteira printfslinha ou putsc fclosearq fecha o arquivo Cap10Prog06 Linguagem C Prof Almir Silveira CEFET jul 17 Fundamentos Sistemas de Computadores 16 feof para arquivos texto e binários Retorna zero se o final do arquivo foi atingido e um valor não nulo caso contrário Sintaxe da função int feofFILE arquivo include stdioh include conioh include ctypeh int main char str255 FILE arq arq fopenfaulatxt r while feofarq imprime todo o arquivo no monitor fgetsstr 255 arq printfs str fclosearq return0 Cap10Prog07 Linguagem C Prof Almir Silveira CEFET jul 17 Fundamentos Sistemas de Computadores 17 rewind para arquivos texto e binários Retorna o indicador de posição do ponteiro FILE em relação ao arquivo para o seu início Sintaxe da função void rewindFILE arquivo include stdioh include stdlibh int main char str255 FILE arq arq fopenaulatxt r for int i 0 i 5 i imprime o arquivo 5 vezes no monitor while feofarq fgetsstr 255 arq printfs str printf rewindarq fclosearq return0 Cap10Prog08 Linguagem C Prof Almir Silveira CEFET jul 17 Fundamentos Sistemas de Computadores 18 Fechando um arquivo função fclose Quando um programa não precisa mais utilizar um arquivo por um período de tempo longo o arquivo pode ser fechado Fechar um arquivo protege os seus dados garante que atualizações feitas serão salvas e libera o arquivo para outros usuários ou programas poderem utilizálo int fcloseFILE fp fclosearquivo Fechando arquivo Linguagem C Prof Almir Silveira CEFET jul 17 Fundamentos Sistemas de Computadores 19 include stdioh include conioh int main FILE fp char ch fp fopen arquivotxt r if fp NULL perror Erro abrindo arquivo else while ch EOF ch getcfp putchar ch fclose fp return 0 Exemplo de código para ler e imprimir usando getc Cap10Prog09 Linguagem C Prof Almir Silveira CEFET jul 17 Fundamentos Sistemas de Computadores 20 include stdioh int main FILE pArq char mystring 100 pArq fopen aulatxt r if pArq NULL perror Erro abrindo arquivo else fgets mystring 100 pArq puts mystring fclose pArq return 0 Cap10Prog10 O Programa não tem um processo de repetição Logo apenas lê uma única linha do arquivo Linguagem C Prof Almir Silveira CEFET jul 17 Fundamentos Sistemas de Computadores 21 C provê funções para escrever caracteres strings padrões formatados ou vetores de bytes int putcint c FILE f Escreve o caracter c Retorna EOF em caso de erro int fputcint c FILE f Escreve o byte c Retorna EOF em caso de erro int fputschar dest FILE f Escreve a string dest que deve ter o zero terminador no arquivo Retorna EOF em caso de erro int fprintfFILE f char formato printf para arquivos int fwritevoid dados int tamelem int numelem FILE f Escreve numelem elementos de tamelem bytes cada armazenados em dados Retorna o número de elementos escritos com sucesso Linguagem C Prof Almir Silveira CEFET jul 17 Fundamentos Sistemas de Computadores 22 main FILE arq char ch if arqfopentestedatw NULL printfArquivo não pode ser criado exit1 do chgetchar putccharq while ch0 fclosearq Escreve cada caracter lido em um arquivo usando putc Cap10Prog11 Cap10Prog11B Linguagem C Prof Almir Silveira CEFET jul 17 Fundamentos Sistemas de Computadores 23 include stdioh int main FILE pArq char str 255 printf Informe string a gravar em arquivo fgets str255stdin pArq fopen arquivotxta fputs str pArq fclose pArq return 0 Escreve uma string lida em um arquivo usando fputs Cap10Prog12 Linguagem C Prof Almir Silveira CEFET jul 17 Fundamentos Sistemas de Computadores 24 Permitem escrever e ler blocos de dados sua forma geral é a seguinte int freadvoid buffer int numbytes int cont FILE fp int fwritevoid buffer int numbytes int cont FILE fp fwrite e fread Linguagem C Prof Almir Silveira CEFET jul 17 Fundamentos Sistemas de Computadores 25 include stdioh int main FILE pf float pi 31415 float pilido If pf fopenarquivobin wb NULL printf Erro na abertura do arquivo exit1 if fwritepi sizeoffloat 1pf 1 Escreve a variável pi printfErro na escrita do arquivo fclosepf Fecha o arquivo if pf fopenarquivobin rb NULL Abre o arquivo para nova leitura printfErro na abertura do arquivo exit1 if freadpilido sizeoffloat 1pf 1 Le em pilido o valor da variável armazenada anteriormente printfErro na leitura do arquivo printf O valor de PI lido do arquivo e f pilido fclosepf return0 Exemplo usando fwrite e fread Cap10Prog13 Linguagem C Prof Almir Silveira CEFET jul 17 Fundamentos Sistemas de Computadores 26 A função ferror determina se a operação de arquivo produziu um erro Sua forma geral será int ferrorFILE fp include stdioh int main FILE pArq pArqfopenaulatxtr if pArqNULL perror Erro ao abrir arquivo else fputc xpArq if ferror pArq printf Erro na escrita ao arquivo fclose pArq return 0 Erros com arquivos Cap10Prog14 Linguagem C Prof Almir Silveira CEFET jul 17 Fundamentos Sistemas de Computadores 27 fseek para arquivos binários O fato de podermos guardar facilmente estruturas de tamanho fixo em arquivos binários permite que possamos localizar diretamente um elemento no arquivo sem precisar ler todos os elementos que o precedem como teria de ser feito em um arquivo texto Para ler diretamente o elemento desejado é necessário mover o cursor do arquivo até a posição desejada utilizando a função fseek Recebe 3 parâmetros a variável associada ao arquivo um deslocamento em bytes que pode ser tanto positivo quanto negativo e o ponto relativo ao qual o deslocamento é realizado Esse último pode assumir 3 valores constantes SEEKSET indicando que o deslocamento deve iniciar no começo do arquivo SEEKCUR indicando que o deslocamento é a partir da posição atual do cursor e SEEKEND indicando que o deslocamento deve ser iniciado a partir do fim do arquivo Sintaxe da função fseekFILE arquivo int deslocamento int pontoInicio O programa abaixo abre um arquivo com um vetor de inteiros lê a iésima posição do vetor i indicado pelo usuário incrementa uma unidade e grava no mesmo ponto do arquivo Linguagem C Prof Almir Silveira CEFET jul 17 Fundamentos Sistemas de Computadores 28 include stdioh int main void int vet4 5 10 15 20 int i elem FILE arq arq fopen vetdat wb if arq NULL fwritevet sizeof int 4 arq printfdigite um numero que representa uma posicao do vetor scanf d i if i 0 i 4 Posiciona o cursor no iesimo elemento fseek arq i sizeof int SEEKSET le um inteiro fread elem sizeof int 1 arq elem elem 1 Volta 1 posicao reposiciona no i esimo fseek arq sizeof int SEEKCUR grava o novo elemento fwrite elem sizeof int 1 arq rewindarq freadvet sizeofint 4 arq carrega todo o arquivo no vetor for i 0 i 4 i imprime o arquivo alterado printfd veti fclose arq else printf Nao foi possivel abrir o arquivo return 0 Cap10Prog15 Linguagem C Prof Almir Silveira CEFET jul 17 Fundamentos Sistemas de Computadores 29 Em todo arquivo aberto há um cursor indicando a posição onde ocorrerá a próxima leitura eou escrita Todas as operações de leitura e escrita avançam o cursor após lerescrever os dados Para mover o cursor ou obter sua posição atual temos int fseekFILE f long distancia int origem Move o cursor do arquivo f para a posição distancia relativa em bytes a alguma origem A origem deve ser uma destas 3 constantes SEEKSET início do arquivo SEEKCUR posição atual SEEKEND fim do arquivo fseek retorna 0 em caso de sucesso 1 em caso de erro Obs Normalmente é utilizado em arquivos binários long rewindFILE f Move o cursor para o inicio do arquivo long ftellFILE f Retorna a posição atual do cursor no arquivo f Linguagem C Prof Almir Silveira CEFET jul 17 Fundamentos Sistemas de Computadores 30 include stdioh int main void FILE arq char c char frase33 esta frase e um teste para saber char frasein33 escrevendo arq fopenarq1datwb if arq NULL printfnao consigo abrir o arquivo else printfArquivo aberto com sucesso fwritefrasesizeofchar32arq fclosearq lendo arq fopenarq1datrb Lê uma frase gravada num arquivo binário e um caracter de uma posição específicado arquivo binário if arq NULL printfNao consegui abrir o arquivo else printf Arquivo aberto com sucesso freadfraseinsizeofchar32arq fseekarq16L0 c getcarq fclosearq printfNome s frasein putcharc return0 Cap10Prog16 Linguagem C Prof Almir Silveira CEFET jul 17 Fundamentos Sistemas de Computadores 31 Obter o tamanho de um arquivo Cap10Prog17 include stdioh int main char nomeArq100 nome do arquivo FILE arq ponteiro para o arquivo long tam tamanho em bytes do arquivo printfDigite o nome do arquivo scanfs nomeArq abre o arquivo para leitura arq fopennomeArq r verifica se o arquivo foi aberto com sucesso if arq NULL movimenta a posição corrente de leitura no arquivo para o seu fim fseekarq 0 SEEKEND pega a posição corrente de leitura no arquivo tam ftellarq imprime o tamanho do arquivo printfO arquivo s possui ld bytes nomeArq tam else printfArquivo inexistente return 0 Linguagem C Prof Almir Silveira CEFET jul 17 Fundamentos Sistemas de Computadores 32 include stdioh int mainint argcchar argv FILE in out char ch if arg 3 printfDigite o Nome dos Arquivos n exit1 if infopenargv1rb NULL printfArquivo origem não existe exit1 Programa para copiar arquivos if outfopenargv2wb NULL printfArquivo destino não existe exit1 while feofin putcgetcinout esta é a cópia propriamente dita fclosein fcloseout Cap10Prog18
Envie sua pergunta para a IA e receba a resposta na hora
Recomendado para você
32
Linguagem C: Fundamentos de Sistemas de Computadores e Tipos de Arquivos
Linguagens de Programação
CEFET/RJ
39
Structs e Unions em C: Estruturas de Dados Compostas - Fundamentos e Exemplos
Linguagens de Programação
CEFET/RJ
39
Structs e Unions em C: Fundamentos de Estruturas de Dados Compostos
Linguagens de Programação
CEFET/RJ
39
Structs e Unions em C: Fundamentos de Estruturas de Dados Compostas
Linguagens de Programação
CEFET/RJ
7
Exploração do Firebase Cloud Messaging com Flutter
Linguagens de Programação
CEFET/RJ
Texto de pré-visualização
Linguagem C Prof Almir Silveira CEFET jul 17 Fundamentos Sistemas de Computadores Arquivos 1 Linguagem C Prof Almir Silveira CEFET jul 17 Fundamentos Sistemas de Computadores Tipos de Arquivos Tipos de arquivo Sequencial texto Caracteres armazenadas sequencialmente É possível determinar o primeiro segundo terceiro caracteres que compõem o arquivo Composto apenas de caracteres organizados em linhas de no máximo 255 caracteres Cada linha é terminada com um caractere de fim de linha ex CRLF no DOS Binário Formado por uma sequência de bytes sem correspondência com um tipo de dado Cabe ao programador fazer esta correspondência quando lê e escreve estes arquivos Qualquer tipo de dado incluindo texto Bytes de dados em um stream binário não são traduzidos ou interpretados de forma diferente Por exemplo no modo texto a combinação dos caracteres correspondentes ao carriage return CR e line feed LF em um arquivo são interpretados como um ao imprimir na tela Em modo binário não recebem tratamento específico sendo impresso os caracteres especiais como parte da mesma linha 2 Linguagem C Prof Almir Silveira CEFET jul 17 Fundamentos Sistemas de Computadores 3 Antes de acessar os dados dentro de um arquivo é necessário abri lo Executase as operações desejadas com o arquivos usando funções específicas para leitura e escrita Ao terminar de realizar as operações no arquivo devemos fechálo As operações de abertura e fechamento garantem a integridade dos dados As funções referentes a arquivos requerem a inclusão do stdioh e todo arquivo aberto é referenciado por um ponteiro para o tipo FILE Como trabalhar com arquivos Linguagem C Prof Almir Silveira CEFET jul 17 Fundamentos Sistemas de Computadores Descritor de arquivos 4 Arquivo lógico na memória Disco Memória Em C Estrutura de dados denominada FILE Aponta para um arquivo físico no disco O arquivo lógico é armazenado em variáveis de memória definidas pelo programador Todas operações feitas pelo descritor refletem no arquivo Criando um descritor FILE arq arquivotxt Arq Descritor de Arquivo FILE Arquivo Físico Linguagem C Prof Almir Silveira CEFET jul 17 Fundamentos Sistemas de Computadores 5 Arq Vantagens Desvantagens T E X T O Facilidade de leitura os dados podem ser lidos por qualquer programa caractere por caractere Maior gasto de memória gasta 1 byte por caractere exigindo por exemplo 10 bytes para armazenar o número 123456789 que gastaria 4 bytes em um float Maior gasto de tempo em buscas para acessar o nésimo elemento exige uma busca sequencial acessando todos os elementos anteriores no arquivo B I N Á R I O Menor gasto de memória similar à forma como é armazenado em memória RAM onde o número 123456789 gastaria 4 bytes equivalente a um float Menor gasto de tempo em buscas para saber a posição do nésimo número fracionário de uma lista de números fracionários bastaria localizar a posição nsizeoffloat movendo o cursor do arquivo Dificuldade de leitura apenas o criador do arquivo sabe como manipulálo Linguagem C Prof Almir Silveira CEFET jul 17 Fundamentos Sistemas de Computadores 6 A função fopen tem duas finalidades abrir uma descritor de bytes ligar um arquivo em disco àquele descritor FILE fopenchar NomeArquivo char modo nome arquivo nome do arquivo com ou sem o caminho a ser aberto modo modo de abertura do arquivo controlando se é arquivo texto ou binário para leitura escrita ou ambos Os possíveis modos de abertura de um arquivo são mostrados na tabela a seguir Abrindo arquivos include stdioh int main FILE arquivo arquivo fopen aulatxt r if arquivo NULL printf Arquivo aberto com sucesso fclose arquivo else printf Nco foi posscvel abrir o arquivo134161 return0 Cap10Prog01 Linguagem C Prof Almir Silveira CEFET jul 17 Fundamentos Sistemas de Computadores 7 Outro exemplo FILE parquivo char nome textotxt if parquivo fopennome wb NULL printf Nao foi possivel abrir o arquivo para escrita exit1 Abrindo arquivos Funciona como o printf exceto pelo fato de que envia a saída para o stream e não para o monito Não funciona para arquivos binários pois converte os dados em texto É necessário usar a função fwrite FILE arq arq fopenatxt w fprintfarq ddd 2 5 2006 escreve no arquivo texto252006 fclosearq Sintaxe da função int fprintfFILE arquivo char formatocaracteres Linguagem C Prof Almir Silveira CEFET jul 17 Fundamentos Sistemas de Computadores 8 Modo Significado r Abre Arquivo de Texto para Leitura w Cria Arquivo de Texto para Gravação a Anexa a um Arquivo de Texto rb Abre Arquivo Binário para Leitura wb Cria Arquivo Binário para Gravação ab Anexa a um Arquivo Binário r Abre Arquivo de Texto para LeituraGravação w Cria Arquivo de Texto para LeituraGravação a Abre ou Cria Arquivo de Texto para LeituraGravação rb Abre Arquivo Binário para LeituraGravação wb Cria Arquivo Binário para LeituraGravação ab Abre ou Cria Arquivo Binário para LeituraGravação Linguagem C Prof Almir Silveira CEFET jul 17 Fundamentos Sistemas de Computadores 9 fwrite para arquivos binários Recebe 4 parâmetros um ponteiro para o vetor em memória o tamanho de cada elemento do vetor o número de elementos do vetor e a variável associada ao arquivo Sintaxe da função int fwritechar vet int tam int num FILE arquivo for i0i5i printfd veti for i0i5i printf Digite valores inteiro scanfdveti arq1 fopenfarq1datwb fwritevet sizeof int 5 arq1 fclose arq1 arq1 fopenfarq1datrb freadvet sizeofint 5 arq1 copia os dez inteiros do arquivo para o vetor fclosearq1 for i0i5i printfd veti return0 include stdioh int main FILE arq1 int i int vet5 0 1 2 3 4 arq1 fopenfarq1datwb fwritevet sizeof int 5 arq1 fclose arq1 arq1 fopen farq1dat rb freadvet sizeofint 5 arq1 copia os cinco inteiros do arquivo para o vetor fclosearq1 Cap10Prog02 Linguagem C Prof Almir Silveira CEFET jul 17 Fundamentos Sistemas de Computadores 10 C provê funções para ler caracteres linhas de texto padrões formatados ou vetores de bytes int getcFILE arquivo lê um caracter do arquivo e retorna seu valor como inteiro Retorna EOF em caso de erro int fgetcFILE f lê um byte retorna seu valor 0255 como inteiro Retorna EOF em caso de erro char fgetschar dest int limite FILE f lê uma linha de texto ou até atingir o limite de bytes lidos e guarda o texto lido em dest Retorna dest em caso de sucesso NULL em caso de erro Scanf para arquivos int fscanfFILE f char formato lê numelem elementos de tamelem bytes cada e armazena em dados Retorna o número de elementos lidos com sucesso int freadvoid dados int tamelem int numelem FILE f Linguagem C Prof Almir Silveira CEFET jul 17 Fundamentos Sistemas de Computadores 11 C provê funções para ler caracteres linhas de texto padrões formatados ou vetores de bytes int getcFILE arquivo lê um caracter do arquivo e retorna seu valor como inteiro Retorna EOF em caso de erro int fgetcFILE f lê um byte retorna seu valor 0255 como inteiro Retorna EOF em caso de erro char fgetschar dest int limite FILE f lê uma linha de texto ou até atingir o limite de bytes lidos e guarda o texto lido em dest Retorna dest em caso de sucesso NULL em caso de erro int fscanfFILE f char formato scanf para arquivos int freadvoid dados int tamelem int numelem FILE f lê numelem elementos de tamelem bytes cada e armazena em dados Retorna o número de elementos lidos com sucesso Linguagem C Prof Almir Silveira CEFET jul 17 Fundamentos Sistemas de Computadores 12 fscanf para arquivos texto Funciona como o scanf exceto pelo fato de que lê do arquivo e não do teclado Sintaxe da função int fscanfFILE arquivo char formatocaracteres include stdioh include conioh include ctypeh include stdlibh int main int dia mes ano FILE arq arq fopen arq1txt r if arq NULL perror Erro abrindo arquivo else fscanf arq ddd dia mes ano fscanf arq d dia fscanf arq d mes fscanf arq d ano printf d d ddia mes ano fclosearq return0 Cap10Prog03 Linguagem C Prof Almir Silveira CEFET jul 17 Fundamentos Sistemas de Computadores 13 fread para arquivos binários Sintaxe da função int freadchar vet int tam int num FILE arquivo include stdioh include conioh include ctypeh include stdlibh int main FILE arq1 int i int vet5 0 1 2 3 4 arq1 fopenfarq1datwb fwritevet sizeof int 5 arq1 copia os cinco inteiros do vetor para o arquivo fclose arq1 arq1 fopen farq1dat rb freadvet sizeofint 5 arq1 copia os cinco inteiros do arquivo para o vetor fclosearq1 for i0i5i printfd veti return0 Cap10Prog04 Linguagem C Prof Almir Silveira CEFET jul 17 Fundamentos Sistemas de Computadores 14 getc e fgetc para arquivos texto Funções idênticas Devolvem o caracter apontado pelo ponteiro FILE ou EOF end of file em um erro Sintaxe da função char fgetcFILE arquivo include stdioh include stdlibh int main int cnlinhas1 FILE arq arqfopenaulatxt r if arqNULL printfNao foi possivel abrir o arquivo exit1 Cap10Prog05 While cfgetc arqEOF putcharc if c nlinhas fclosearq fecha o arquivo exibe o resultado na tela printf nNumero de linhas d nlinhas return 0 Linguagem C Prof Almir Silveira CEFET jul 17 Fundamentos Sistemas de Computadores 15 fgets para arquivos Para ter uma linha de caracteres do arquivo Sintaxe da função char fgetschar string int tamanho FILE arquivo mostra linhas de arquivo de texto include stdioh include stdlibh int main char linha41 FILE arq arqfopenaulatxt rt abre o arquivo if arqNULL printfNão foi possível abrir o arquivo systempause exit1 whilefgetslinha 40 arq NULL le uma linha inteira printfslinha ou putsc fclosearq fecha o arquivo Cap10Prog06 Linguagem C Prof Almir Silveira CEFET jul 17 Fundamentos Sistemas de Computadores 16 feof para arquivos texto e binários Retorna zero se o final do arquivo foi atingido e um valor não nulo caso contrário Sintaxe da função int feofFILE arquivo include stdioh include conioh include ctypeh int main char str255 FILE arq arq fopenfaulatxt r while feofarq imprime todo o arquivo no monitor fgetsstr 255 arq printfs str fclosearq return0 Cap10Prog07 Linguagem C Prof Almir Silveira CEFET jul 17 Fundamentos Sistemas de Computadores 17 rewind para arquivos texto e binários Retorna o indicador de posição do ponteiro FILE em relação ao arquivo para o seu início Sintaxe da função void rewindFILE arquivo include stdioh include stdlibh int main char str255 FILE arq arq fopenaulatxt r for int i 0 i 5 i imprime o arquivo 5 vezes no monitor while feofarq fgetsstr 255 arq printfs str printf rewindarq fclosearq return0 Cap10Prog08 Linguagem C Prof Almir Silveira CEFET jul 17 Fundamentos Sistemas de Computadores 18 Fechando um arquivo função fclose Quando um programa não precisa mais utilizar um arquivo por um período de tempo longo o arquivo pode ser fechado Fechar um arquivo protege os seus dados garante que atualizações feitas serão salvas e libera o arquivo para outros usuários ou programas poderem utilizálo int fcloseFILE fp fclosearquivo Fechando arquivo Linguagem C Prof Almir Silveira CEFET jul 17 Fundamentos Sistemas de Computadores 19 include stdioh include conioh int main FILE fp char ch fp fopen arquivotxt r if fp NULL perror Erro abrindo arquivo else while ch EOF ch getcfp putchar ch fclose fp return 0 Exemplo de código para ler e imprimir usando getc Cap10Prog09 Linguagem C Prof Almir Silveira CEFET jul 17 Fundamentos Sistemas de Computadores 20 include stdioh int main FILE pArq char mystring 100 pArq fopen aulatxt r if pArq NULL perror Erro abrindo arquivo else fgets mystring 100 pArq puts mystring fclose pArq return 0 Cap10Prog10 O Programa não tem um processo de repetição Logo apenas lê uma única linha do arquivo Linguagem C Prof Almir Silveira CEFET jul 17 Fundamentos Sistemas de Computadores 21 C provê funções para escrever caracteres strings padrões formatados ou vetores de bytes int putcint c FILE f Escreve o caracter c Retorna EOF em caso de erro int fputcint c FILE f Escreve o byte c Retorna EOF em caso de erro int fputschar dest FILE f Escreve a string dest que deve ter o zero terminador no arquivo Retorna EOF em caso de erro int fprintfFILE f char formato printf para arquivos int fwritevoid dados int tamelem int numelem FILE f Escreve numelem elementos de tamelem bytes cada armazenados em dados Retorna o número de elementos escritos com sucesso Linguagem C Prof Almir Silveira CEFET jul 17 Fundamentos Sistemas de Computadores 22 main FILE arq char ch if arqfopentestedatw NULL printfArquivo não pode ser criado exit1 do chgetchar putccharq while ch0 fclosearq Escreve cada caracter lido em um arquivo usando putc Cap10Prog11 Cap10Prog11B Linguagem C Prof Almir Silveira CEFET jul 17 Fundamentos Sistemas de Computadores 23 include stdioh int main FILE pArq char str 255 printf Informe string a gravar em arquivo fgets str255stdin pArq fopen arquivotxta fputs str pArq fclose pArq return 0 Escreve uma string lida em um arquivo usando fputs Cap10Prog12 Linguagem C Prof Almir Silveira CEFET jul 17 Fundamentos Sistemas de Computadores 24 Permitem escrever e ler blocos de dados sua forma geral é a seguinte int freadvoid buffer int numbytes int cont FILE fp int fwritevoid buffer int numbytes int cont FILE fp fwrite e fread Linguagem C Prof Almir Silveira CEFET jul 17 Fundamentos Sistemas de Computadores 25 include stdioh int main FILE pf float pi 31415 float pilido If pf fopenarquivobin wb NULL printf Erro na abertura do arquivo exit1 if fwritepi sizeoffloat 1pf 1 Escreve a variável pi printfErro na escrita do arquivo fclosepf Fecha o arquivo if pf fopenarquivobin rb NULL Abre o arquivo para nova leitura printfErro na abertura do arquivo exit1 if freadpilido sizeoffloat 1pf 1 Le em pilido o valor da variável armazenada anteriormente printfErro na leitura do arquivo printf O valor de PI lido do arquivo e f pilido fclosepf return0 Exemplo usando fwrite e fread Cap10Prog13 Linguagem C Prof Almir Silveira CEFET jul 17 Fundamentos Sistemas de Computadores 26 A função ferror determina se a operação de arquivo produziu um erro Sua forma geral será int ferrorFILE fp include stdioh int main FILE pArq pArqfopenaulatxtr if pArqNULL perror Erro ao abrir arquivo else fputc xpArq if ferror pArq printf Erro na escrita ao arquivo fclose pArq return 0 Erros com arquivos Cap10Prog14 Linguagem C Prof Almir Silveira CEFET jul 17 Fundamentos Sistemas de Computadores 27 fseek para arquivos binários O fato de podermos guardar facilmente estruturas de tamanho fixo em arquivos binários permite que possamos localizar diretamente um elemento no arquivo sem precisar ler todos os elementos que o precedem como teria de ser feito em um arquivo texto Para ler diretamente o elemento desejado é necessário mover o cursor do arquivo até a posição desejada utilizando a função fseek Recebe 3 parâmetros a variável associada ao arquivo um deslocamento em bytes que pode ser tanto positivo quanto negativo e o ponto relativo ao qual o deslocamento é realizado Esse último pode assumir 3 valores constantes SEEKSET indicando que o deslocamento deve iniciar no começo do arquivo SEEKCUR indicando que o deslocamento é a partir da posição atual do cursor e SEEKEND indicando que o deslocamento deve ser iniciado a partir do fim do arquivo Sintaxe da função fseekFILE arquivo int deslocamento int pontoInicio O programa abaixo abre um arquivo com um vetor de inteiros lê a iésima posição do vetor i indicado pelo usuário incrementa uma unidade e grava no mesmo ponto do arquivo Linguagem C Prof Almir Silveira CEFET jul 17 Fundamentos Sistemas de Computadores 28 include stdioh int main void int vet4 5 10 15 20 int i elem FILE arq arq fopen vetdat wb if arq NULL fwritevet sizeof int 4 arq printfdigite um numero que representa uma posicao do vetor scanf d i if i 0 i 4 Posiciona o cursor no iesimo elemento fseek arq i sizeof int SEEKSET le um inteiro fread elem sizeof int 1 arq elem elem 1 Volta 1 posicao reposiciona no i esimo fseek arq sizeof int SEEKCUR grava o novo elemento fwrite elem sizeof int 1 arq rewindarq freadvet sizeofint 4 arq carrega todo o arquivo no vetor for i 0 i 4 i imprime o arquivo alterado printfd veti fclose arq else printf Nao foi possivel abrir o arquivo return 0 Cap10Prog15 Linguagem C Prof Almir Silveira CEFET jul 17 Fundamentos Sistemas de Computadores 29 Em todo arquivo aberto há um cursor indicando a posição onde ocorrerá a próxima leitura eou escrita Todas as operações de leitura e escrita avançam o cursor após lerescrever os dados Para mover o cursor ou obter sua posição atual temos int fseekFILE f long distancia int origem Move o cursor do arquivo f para a posição distancia relativa em bytes a alguma origem A origem deve ser uma destas 3 constantes SEEKSET início do arquivo SEEKCUR posição atual SEEKEND fim do arquivo fseek retorna 0 em caso de sucesso 1 em caso de erro Obs Normalmente é utilizado em arquivos binários long rewindFILE f Move o cursor para o inicio do arquivo long ftellFILE f Retorna a posição atual do cursor no arquivo f Linguagem C Prof Almir Silveira CEFET jul 17 Fundamentos Sistemas de Computadores 30 include stdioh int main void FILE arq char c char frase33 esta frase e um teste para saber char frasein33 escrevendo arq fopenarq1datwb if arq NULL printfnao consigo abrir o arquivo else printfArquivo aberto com sucesso fwritefrasesizeofchar32arq fclosearq lendo arq fopenarq1datrb Lê uma frase gravada num arquivo binário e um caracter de uma posição específicado arquivo binário if arq NULL printfNao consegui abrir o arquivo else printf Arquivo aberto com sucesso freadfraseinsizeofchar32arq fseekarq16L0 c getcarq fclosearq printfNome s frasein putcharc return0 Cap10Prog16 Linguagem C Prof Almir Silveira CEFET jul 17 Fundamentos Sistemas de Computadores 31 Obter o tamanho de um arquivo Cap10Prog17 include stdioh int main char nomeArq100 nome do arquivo FILE arq ponteiro para o arquivo long tam tamanho em bytes do arquivo printfDigite o nome do arquivo scanfs nomeArq abre o arquivo para leitura arq fopennomeArq r verifica se o arquivo foi aberto com sucesso if arq NULL movimenta a posição corrente de leitura no arquivo para o seu fim fseekarq 0 SEEKEND pega a posição corrente de leitura no arquivo tam ftellarq imprime o tamanho do arquivo printfO arquivo s possui ld bytes nomeArq tam else printfArquivo inexistente return 0 Linguagem C Prof Almir Silveira CEFET jul 17 Fundamentos Sistemas de Computadores 32 include stdioh int mainint argcchar argv FILE in out char ch if arg 3 printfDigite o Nome dos Arquivos n exit1 if infopenargv1rb NULL printfArquivo origem não existe exit1 Programa para copiar arquivos if outfopenargv2wb NULL printfArquivo destino não existe exit1 while feofin putcgetcinout esta é a cópia propriamente dita fclosein fcloseout Cap10Prog18