Re:Problema simples - Linguagem C

Todo mundo comete o mesmo erro - ler e escrever arquivos um byte de cada vez. No seu caso, provavelmente a cópia terminou no primeiro byte 255 que foi encontrado no arquivo de entrada. Você pode corrigir esse problema de duas maneiras:

a) O jeito lento - continuar a ler e escrever um byte de cada vez. Neste caso, você deve usar:

void copyPaste(const char *copy, const char *paste)  
{  
    FILE *entrada  = fopen(copy,"rb");  
    FILE *saida = fopen(paste,"wb");  
    int c ;   // note que é int, não char. Me explique por que é que o programa agora funciona :)
  
    while((c = fgetc(entrada))!= EOF)       
        fputc((char) c,saida);  

    fclose(saida);  
    fclose(entrada);  
} 

Note que não é necessário usar fflush, já que você vai chamar fclose imediatamente depois.

b) O jeito rápido - usar um byte array para transferir o arquivo por blocos. Não vou escrever agora o programa, mas basicamente você tem de usar fread e fwrite, e usar um byte array com pelo menos 8KB ou maior para que o arquivo seja rapidamente copiado.

#include <stdio.h>

int main (int argc, char *argv[]) {
    FILE *input;
    FILE *output;
    char buffer [8 * 1024];
    int nBytesLidos;
    int totalBytesLidos;

    if (argc != 3) {
         fprintf (stderr, "Sintaxe: %s arquivoEntrada arquivoSaida\n", argv[0]);
         exit (1);
    }
    input = fopen (argv[1], "rb");
    output = fopen (argv[2], "wb");
    if (! input) {
        fprintf (stderr, "Arquivo %s nao pode ser aberto para leitura\n", argv[1]);
        exit (1);
    }
    if (! output) {
        fprintf (stderr, "Arquivo %s nao pode ser aberto para escrita\n", argv[2]);
        fcloseall();
        exit (1);
    }
    totalBytesLidos = 0;
    while ((nBytesLidos = fread (buffer, 1, sizeof(buffer), input)) > 0) {
        totalBytesLidos += nBytesLidos;
        fwrite (buffer, 1, nBytesLidos, output);
    }
    fclose (input);
    fclose (output);

    printf ("O arquivo %s foi copiado para %s. Total de bytes copiados: %d\n", 
        argv[1], argv[2], totalBytesLidos);
    fflush (stdout);
}

Preciso transferir um arquivo e o codigo abaixo não ta salvando absolutamente nada …
Estou tentando transferir uma img de uma pasta para outra…
O copy e paste inicialmente usei pra ser a referencia de arquivo,porem não consegui
e por isso mudei e coloquei os valores ali diretamente…
Errei alguma coisa?

void copyPaste(char *copy,char *paste)
{
	FILE *entrada  = fopen("nfe.pdf","rb");
	FILE *saida = fopen("nfe2","wb");
	char c ;

	while((c = fgetc(entrada))!= EOF)       fputc(c,saida);

	fflush(saida);	
	fclose(saida);
	fclose(entrada);
}

Da pelo menos uma dica de qual estrutura usar no fread ou fwrite…

:smiley: