• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

mellony

Escrita Leitura Ficheiros

9 mensagens neste tópico

Boas

Eu sei que já existe um tópico identico, mas prefiro debater aqui.

Queria que me dessem o codigo fonte de 2 situações:

Programa 1- Escrever uma frase num ficheiro do bloco de notas que já existe. (Ao abrir o programa ele escreve logo uma frase no ficheiro bloco de bloco de notas).

Programa 2- Ao abrir o programa ele lê a frase que está na primeira linha do ficheiro do bloco de notas, e mostra-a.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Geralmente aqui no fórum, ninguém dá código. As pessoa que têm dúvidas expõe-nas e as restantes tentam ajudar.

Achas que vais aprender alguma coisa se te derem esses dois programas feitos e não tiveres que puxar um bocadinho pela cabeça para o fazer?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ok, desculpem, não sabia que não podiam dar codigo mesmo quando se tratasse desses pequenos exemplos.

Eu aprenderia com exemplos, tenho facilidadeema perceber a logica das coisas atraves de exemplos, mas ok eu deveria ter pesquisado, sry.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O problema não é poder ou não poder dar código.

A questão é que programação aprende-se a programar! Não se aprende a estudar exemplos nem a ler livros, não. Aprende-se essencialmente a programar, e a começar com coisas bem básicas.

Tu podes achar que ias perceber bem o código se to dessem, acredito que sim, mas o problema estaria quando depois és tu que o tens que fazer. :thumbsup:

Já agora, um link que aparece na pesquisa do fnds e que é da casa: http://wiki.portugal-a-programar.org/c:ficheiros

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Programa 1- Escrever uma frase num ficheiro do bloco de notas que já existe. (Ao abrir o programa ele escreve logo uma frase no ficheiro bloco de bloco de notas).

Os "ficheiros do bloco de notas" são ficheiros de texto puro, iguais a quaisquer outros ficheiros de texto.

O que tu queres saber é como se abre um ficheiro em modo "append".

  a      Open for appending (writing at end of file).  The file is created if it does not exist.

          The stream is positioned at the end of the file.

  a+  Open for reading and appending (writing at end of file).  The file  is  created  if  it

          does not exist.  The initial file position for reading is at the beginning of the file,

          but output is always appended to the end of the file.

Abres o ficheiro com o segundo argumento do fopen "a" ou "a+", e escreves normalmente lá para dentro. No fim, fechas.

JJ

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Muita atenção ao usar fopen() principalmente para software que se pretenda que corra no Windows Vista, mas basicamente para qualquer sistema que implemente direitos de acesso a ficheiros e directórios baseados em user rights.

Depreendi pelas especificações do mellony que o ficheiro já existe. Falta dizer o que fazer caso o ficheiro não exista.

Se o programa tiver que efectuar operações diferentes caso o ficheiro não exista então temos um problema bicudo com o ISO C, uma vez que simplesmente não existe forma de testar com toda a certeza que um ficheiro existe.

A primeira tendência é fazer isto:

#include <stdio.h>

bool fexists(const char* ficheiro) {

    if ( FILE* fp = fopen(ficheiro, "r") ) {
        fclose(ficheiro);
        return true;
    }

    return false;

}

Pois é. Mas o ficheiro pode existir e fopen() ainda assim devolver NULL, levando a função a responder com false. O ficheiro pode ter demasiadas locks e o sistema operativo recusa-se a criar mais um, ou o utilizador pode não ter acesso de leitura ao ficheiro, ou ainda o directório onde o ficheiro se encontra pode não permitir o acesso.

Feliz ou infelizmente a questão dos access rights tornou-se bastante premente no Windows com a introdução do Windows Vista. Na minha opinião infelizmente porque quebrou a backward compatibility com software desenvolvido para Windows XP. Muito software que normalmente escrevia para Program Files, de repente vê-se impossibilitado de o fazer, obrigando a utilização dos user directories.

Fora do contexto do ISO C, existem no entanto outras soluções. Mas estas são específicas do Sistema Operativo e dos compiladores que as implementem.

#include<sys/stat.h>

// ora... se não me falha a memória...

bol fexists (const char* ficheiro) {

   struct stat st;
   int res = stat(ficheiro, &st);
   if (res < 0)  return false;
   return true;

}

Funciona em UNIX flavours via gcc e em Windows via MinGW e Visual C++ (pese embora eu me lembre de um qualquer problema à muito tempo com o MinGW e esta função. Mas foi à tanto tempo que provavelmente já foi corrigido). Em relação a outros compiladores e OSes não sei. Atenção que é muito provável que stat funcione de forma diferente com diferentes compiladores. Não é uma função standard.

Stat é uma função pesadita. A struct é complexa e particularmente em sistemas *NIX contém muita informação. Portanto...

#include <io.h>

// se não me falhar a memória outra vez...

bol fexists (const char* ficheiro) {

    if ( access(ficheiro, 0) ) return true;
    return false;

}

access() é também suportado pelos mesmos compiladores e sistemas operativos. Mais uma vez é um função não standard pelo que funciona de modo diferente nos dois compiladores (nada de cross-compiling a não ser que controlem isso com o pre-processador). É o preço que se paga por usar funções não standard. Penso que em gcc se inclui <errno.h> e o segundo parametro é F_OK para testar apenas a existência de um ficheiro.... ou qualquer coisa assim. É ler a documentação.

access() é a mais rápida das soluções. 0 ou F_OK verifica apenas se o ficheiro existe.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Feliz ou infelizmente a questão dos access rights tornou-se bastante premente no Windows com a introdução do Windows Vista. Na minha opinião infelizmente porque quebrou a backward compatibility com software desenvolvido para Windows XP. Muito software que normalmente escrevia para Program Files, de repente vê-se impossibilitado de o fazer, obrigando a utilização dos user directories.

Pode ter sido de repente, mas nalguma altura tinha de acontecer.

JJ

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ajudaram-me muito, obrigado :thumbsup:

Sim o ficheiro já existe, é criado manualmente, é um ficheiro que tem que estar constantemente presente.

Aquele link da wiki do p@p é muito bom, vou explorar isso.

Aviso que no link que me deram, o titulo está mal, se quiserem corrigir...o erro é este:

"Manupulação de Ficheiros"

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora