Dúvida com o fseek

1. Dúvida com o fseek

Danilo
danilopenin

(usa RedHat)

Enviado em 26/11/2008 - 13:56h

Pessoal, tenho um arquivo já com dados e o que eu vou precisar alterar esta sempre no final dele, estou tentando fazer isso com o fseek, mas não esta dando certo, meu código está assim:

Código:

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
FILE *fpArquivo;

fpArquivo = fopen("teste.txt", "at");
if(fpArquivo == NULL)
{
printf("ERRO");
}
fseek(fpArquivo, -4, SEEK_END);
fputs("J",fpArquivo);

fclose(fpArquivo);

system("PAUSE");
return 0;
}

Por exemplo, um arquivo com o conteúdo "ABCDEF", ficou "ABCDEFJ", mas eu gostaria que fosse "ABJDEF"

Esse programa está sempre colocando o caracter no final do arquivo, depois do último caracter, não está voltando as 4 posições que eu coloquei no fseek.

Por que? O que esta de errado? O que eu tenho que fazer para que ele volte as posições e escreva na posição correta?

Grato,
Danilo


  


2. Re: Dúvida com o fseek

Daniel
code0

(usa Slackware)

Enviado em 26/11/2008 - 18:35h

Eu faria diferente. Primeiro identificaria o tamanho do arquivo depois faria o fseek com SEEK_SET tamanho-bytes:

struct stat stt;
FILE *fd;

if(stat("arquivo.txt",&stt)<0) {
perror("stat fail:");
return -1;
}


// O tamanho do arquivo, em bytes, esta em stt.st_size
fd=fopen(...);
fseek(fd,stt.st_size-4,SEEK_SET);
...

Nos testes que fiz aqui funcionou Ok.








Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts