C - Alguns arquivos são lidos, outros não. [Resolvido]

2 respostas
Andre_Rosa

Olá,
estou fazendo um programa em C que copia um arquivo de texto inteiro. Ele copia caractere por caractere, e vai jogando dentro do segundo arquivo. O que fiz foi isso:

#include <stdio.h>

#define ARQ_1 "file1.txt"
#define ARQ_2 "file2.txt"

int main(){
    FILE* MyFile;
    FILE* MyFileOut;
    char* Linha = (char*)malloc(sizeof (char) * 1000);
    char c;
    int i = 0;

    MyFile = fopen(ARQ_1,"r");
    if (!MyFile) {
        printf("O arquivo nao existe.");
        return 1;
    } else {
        printf("Arquivo encontrado!\n");
        printf("Realizando a leitura e copiando seu conteudo...\n");
        while((c = getc(MyFile)) != EOF) {
           // if (c != '\n') {
                Linha[i] = c;
                close(1);
                MyFileOut = fopen(ARQ_2, "a");
                    printf("%c",Linha[i]);
                i++;
         //   }
        }
        Linha[i] = '\0';

    }
    return 0;
}

O problema é que com um arquivo pequeno ele funciona. Por exemplo: com um arquivo cujo conteúdo é:

Teste teste teste
Leitura Leitura
Burn to be nothing
James Dean is the man
Oh no!

ele funciona corretamente. Mas com um arquivo com muitas linhas (umas 100) ele trava, dá aquele erro não-informativo do Windows, de que o programa precisa ser fechado. Bom, acho que o problema é com a alocação de memória. Enfim, alguém sabe o que pode ser, e como eu poderia resolver isso?

Obrigado!

2 Respostas

getAdicted

Boa tarde,

Eu fiz algumas alterações, veja se funciona:

#include &lt;stdio.h&gt;  
  
int main(){  
    FILE * MyFile;  
    FILE * MyFileOut;    
    char c;  
    int i = 0;  
  
    if((MyFile = fopen("file_1.txt","r")) == NULL){
          printf("Erro\n");
            return 0;
    }
    if((MyFileOut = fopen("file_2.txt","a")) == NULL){
        printf("Erro\n");
           return 0;
         }
    
      else {  
        printf("Arquivo encontrado!\n");  
        printf("Realizando a leitura e copiando seu conteudo...\n");  
        while((c = getc(MyFile)) != EOF)   
          fprintf(MyFileOut,"%c",c);    
        }
        //Congelar o prompt
     system("pause");
    return 0;  
}

[]'s

Andre_Rosa

Bonjour, getAdicted.

Seu exemplo funcionou. Vou adapta-lo para o meu.

Merci.

Criado 18 de junho de 2011
Ultima resposta 18 de jun. de 2011
Respostas 2
Participantes 2