Ir para conteúdo
Fórum Script Brasil

Diogoo

Membros
  • Total de itens

    5
  • Registro em

  • Última visita

Posts postados por Diogoo

  1. Teste de novo com o modo "r+b"

    Se não der certo, poste o código.

    FUNCIONOU!!!

    VLW cara!

    eu me matando para tentar sobrescrever e funciona com "r+b".. :D

    Tenho um trabalho para amanhã com isso e iria fazer uma função para carregar em outro arquivo modificando os bits, como tinham falado anteriormente...

    Muito Obrigado Beraldo

    Atc,

    Diogo

  2. tem que manipular os bytes

    use fwrite()

    Veja:

    http://forum.imasters.uol.com.br/index.php...=311072&hl=

    Quanto eu testei utilizando o "ab" na abertura do arquivo ele me retornou a seguinte informação:

    linha1
    linha2
    linha3
    linha4
    
    //////////////////////////
    
    trocar a linha 2 pela mesma informação da linha 4 usando "ab"
    
    linha1
    linha4
    linha2
    linha3
    linha4
    
    /////////////////////////
    
    mas na verdade o que eu queria era
    
    linha1
    linha4
    linha3
    linha4
    
    ///////////////////////
    
    se eu uso o "w" ele faz
    
    ------
    linha4

  3. Eu andei pesquisando e vou tentar apagar a parte do arquivo que quero modificar e após isso eu irei escrever no modo "a"...

    Vocês já tentaram isso? Funciona?

    Em sistemas Unix, há a função truncate(). Ela trunca o arquivo, retirando um número de bytes do final dele.

    Apesar de não se explicitar a reescrita do arquivo, essa função faz isso internamente.

    Eu tive a mesma dúvida: deve haver uma forma de não reescrever o arquivo. Pesquisei por uma semana e não achei nada. Se você achar, poste aqui pois quero usar também.

    O que você pode fazer é mover os bytes do fim do arquivo para a parte do arquivo que deseja apagar. Depois apague o fim do arquivo.

    Por exemplo:

    arq.bin

    linha1
    linha2
    linha3
    linha4
    Quero apagar a linha 2. Logo:
    [code linha 1 linha 4 linha 3 AQUI ESTAVA A LINHA 4, MAS FOI REMOVIDA
    Mas o problema está exatamente nesse "mover os bytes do fim para o meio", porque quando eu faço isso ele está rescrevendo o arquivo apenas com essa parte que eu removir, mesmo que eu faça um fseek para a posição... Essa solução de remover uma parte do arquivo eu só tive por causa desse outro problema. Na verdade o programa já vai alocar o arquivo com o tamanho correto, só tendo que alterar os dados invalidos posteriormente com dados reais... como feito no torrent... Se você souber como substituir essa "linha2" pela "linha4" já resolveria meu problema. Exemplo:
    linha1
    linha2
    linha3
    linha4
    
    \/ \/ \/   
    
    linha1
    linha4
    linha3
    linha4

    Atc,

    Diogo

  4. [Ark]

    Obrigado pela idéia ;), mas acho que se eu tiver um arquivo muito grande e for fazer uma cópia alterando apenas 1024 bytes no caso vai ficar muito pesado. A idéia é criar um cliente/servidor p2p para a transferência de um arquivo em partes.

    [\Ark]

    [beraldo]

    Se essa for realmente a única solução, acho que isso será um "gargalo" muito grande, pois eu utilizarei esse escrita parcial de um arquivo constantemente

    [\Beraldo]

    Eu andei pesquisando e vou tentar apagar a parte do arquivo que quero modificar e após isso eu irei escrever no modo "a"...

    Vocês já tentaram isso? Funciona?

    atc,

    Diogo

  5. Bom dia,

    eu estou tetando a horas sobrescrever uma parte de um arquivo utilizando a linguagem C. Quando eu utilizo o fopen com o parâmetro "a" ou "ab", ele adiciona uma parte nova. Quando eu uso "w" ou "wb" ele sobrescreve o texto todo... segue aqui uma das minhas tentativas:

    char nome_arquivo[200];
        int num;
        char letras[3];
        int tamanho;
        int bloco = 1;
    
        FILE *fp;
        strcpy(nome_arquivo,"C://teste.txt");
        strcpy(letras,"011");
        fp = fopen(nome_arquivo,"w");
        if (fp == NULL){
           printf("Falha ao abrir o arquivo ");
        }else{
           printf("Funcionou \n");
        }
        tamanho = strlen(letras);
        fseek(fp,3*(bloco-1),SEEK_SET);
        num = fwrite(letras,sizeof(char),tamanho,fp);
        printf("-:> %d",num);
        fclose(fp);

    PS: Estou precisando muito dessa resposta...

    Atc,

    Diogo

×
×
  • Criar Novo...