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

Nazgulled

Actualizar ficheiro de texto, possível?

8 mensagens neste tópico

Não tenho qualquer tipo de problemas em ler/escrever em ficheiros de texto usando C, mas estou com uma pequena dúvida. É possível actualizar os mesmos? Por exemplo, tenho determinado ficheiro com várias linhas e apenas pretendo modificar a linha 5. É possível escrever/alterar o ficheiro apenas nesta linha sem ter de reescrever as outras todas ou terei mesmo de limpar o ficheiro e reescrever tudo com o conteúdo actualizado?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Eu acho que com o fseek dá para fazer isso, só não sei se actualiza essa linha ou a partir dessa linha. Não te sei dizer ao certo porque nunca precisei de utilizar. ;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Acho que provavelmente é possível fazê-lo, desde que sejam substituições. Quero dizer, o mesmo número de bytes.

Mais do que isso, tens um método simples: copias para um ficheiro temporário até onde tu estás, adicionas o que queres adicionar, dás o salto que queres dar e voltas a copiar até ao final.

Depois fazes remove e rename, e voltas a ter o ficheiro com a alteração feita.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

@Hipnoted

tive a ler, mas não dá para substituir, posso começar a escrever a partir de um certo ponto, mas o conteúdo que lá está, vai estar sempre lá, não dá para apagar ;)

@Warrior

Isso já era trabalho a mais e desnecessário... eu já tenho os dados todos necessários a serem gravados, não preciso de tar a fazer copias de ficheiros e etc... só queria era poupar no código que vai reescrever o ficheiro...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

@Hipnoted

tive a ler, mas não dá para substituir, posso começar a escrever a partir de um certo ponto, mas o conteúdo que lá está, vai estar sempre lá, não dá para apagar ;)

não percebi muito bem o que querias dizer, mas o 'fseek' permite-te fazer substituição de bytes numa determinada posição sem que tenhas de percorrer o ficheiro. ou seja, se quiseres alterar uma linha, podes fazê-lo, desde que não alteres o tamanho dessa linha.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

fseek() serve para substituir? eu apenas estou a usa-lo em leitura de ficheiros para passar a frente o conteudo que não quero, sei os bytes certos que não quero e sei a posição imaginaria onde se encontra o cursor e faço algo como fseek(fp, num_bytes, SEEK_CUR) e ele "move o cursor" para a essa posição, é para isso que o estou a usar.

Não estarás a confundir esta função com outra ou será que a função serve para substituir também? Embora eu não esteja a ver como... De qualquer forma, só estou a usar o fseek() para isso mesmo, em leitura de ficheiros e não em escrita.

Quanto ao problema deste topico, optei por truncar o ficheiro a 0 e reescrever tudo com os dados alterados...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

fseek() serve para substituir? eu apenas estou a usa-lo em leitura de ficheiros para passar a frente o conteudo que não quero, sei os bytes certos que não quero e sei a posição imaginaria onde se encontra o cursor e faço algo como fseek(fp, num_bytes, SEEK_CUR) e ele "move o cursor" para a essa posição, é para isso que o estou a usar.

Não estarás a confundir esta função com outra ou será que a função serve para substituir também? Embora eu não esteja a ver como... De qualquer forma, só estou a usar o fseek() para isso mesmo, em leitura de ficheiros e não em escrita.

não me expliquei muito bem no post anterior... o 'fseek' permite apenas alterar a posição do "cursor". mas se quiseres substituir o caracter que está na posição 'n', é só fazer 'fseek(file,n-1,SEEK_SET)' e depois fazer 'fputc(...)' (por exemplo), em vez de teres que percorrer o ficheiro todo.

mas tens razão quando dizes que o 'fseek' não serve para substituir.

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