Visualizzazione dei risultati da 1 a 10 su 10

Discussione: [C]problemi con fgetc

  1. #1

    [C]problemi con fgetc

    Ciao a tutti!!

    Ho fatto un piccolo programmino che mi copia i file aprendoli e compiando l'intero contenuto su un altro file...

    codice:
    #include<stdio.h>
    //programma che splitta dei file attraverso puntatori a file
    FILE *fi;
    FILE *fo;
    char per[200];
    int c;
    int fileL;
    main() {
    printf("Inserire il percorso del file da splittare:");
    scanf("%s",&per);
    fi=fopen("per","r");
    fseek(fi,1,2);
    fileL=ftell(fi);
    fseek(fi,0,0);
    printf("\n\nInserire ora il file di destinazione:");
    scanf("%s",&per);
    fo=fopen("per","w");
    while(c<fileL) {
    fputc(fgetc(fi),fo);
    fseek(fo,c,0);
    fseek(fi,c,0);
    c++;
    }
    printf("\n\nFile trasferito");
    }
    effettivamente il programmino funziona bene se non fosse per un piccolo problema.

    Mi copia bene infatti tutti i caratteri fino a che non si trova di fronte all'invio

    Infatti le Ascii per andare a capo sarebbero due la 13 e la 10.

    Nel file però non mi va a capo ma mi fa due quadratini...

    Mi potete dare una mano..

    Infatti finche creo copie di file audio tutto ok ma quando devo fare copie di file exe non mi partono....

    Vi prego un aiuto
    "Penso che nel mondo ci sia mercato per quattro o cinque computer"... Thomas Watson, presidente della IBM, 1943

  2. #2
    Utente di HTML.it L'avatar di infinitejustice
    Registrato dal
    Nov 2001
    residenza
    Barcelona
    Messaggi
    772
    nn sarebbe meglio lavorarci in modalità binaria con fwrite e fread?
    Live fast. Troll hard.
    Pythonist | Djangonaut | Puppeteer | DevOps | OpenStacker | Lost in malloc
    Team Lead @Gameloft Barcelona

  3. #3
    asso ciai ragione provo subito....
    "Penso che nel mondo ci sia mercato per quattro o cinque computer"... Thomas Watson, presidente della IBM, 1943

  4. #4
    codice:
        FILE *fi, *fo;
        char c, path1[]=".\\pippo.txt", path2[]=".\\pluto.txt";
        fi=fopen(path1, "r");
        fo=fopen(path2, "w");
        while(1) 
        {
            c = fgetc(fi);
            if(c == EOF)
                break;
            fputc(c, fo);                
        }
        fclose(fo);
        fclose(fi);
    ...Terrible warlords, good warlords, and an english song

  5. #5
    Funziona con i file di testo ma se prvo con un file per esempio una gif non mi funziona più!

    Non è che c'è un modo anche per gli eseguibili?
    "Penso che nel mondo ci sia mercato per quattro o cinque computer"... Thomas Watson, presidente della IBM, 1943

  6. #6
    codice:
    #define DIM_TXT 99	 // Dimensione Array per il Testo
    #define DIM_CHK 99	// Dimensione Array Check Controllo Valori (per Copia)
    
    // C o p y
    int copy (char*file, char*newfile) {
       char buffer[DIM_TXT];			  // Buffer di Lettura File
       char txtfile[DIM_TXT];		     // Buffer di Lettura Vecchio File
       char txtnewfile[DIM_TXT];	    // Buffer di Lettura Nuovo File
       int check[DIM_CHK];			   // Valori di Controllo 1 Uguale - 0 Diverso
       int i,count;					  // Count = Conta N volte i check...
       int byte = sizeof(char);	 // Dimensione in Byte di un Elemento dell'Array
       int errors;						// Errori Nella Copia del File 0 No - 1 Si
    	FILE *fp,*fpn;            // Puntatori ai File
    
    	fp = fopen(file, "rb");
    	if (fp == NULL) {
    		// FILE Inesistente
          printf(ERROR_FI);
       	printf("\n");
    	} else {
    		// Apri il nuovo file e copia...
    		fpn = fopen(newfile, "r");
    		if (fpn != NULL) {
          	fclose(fpn);	// Chiudi L'apertura in 'r'
             
    			// File GIà esistente
             printf("\n");
          	printf(ADVER_FE);
       		printf("\n");
    		} else {
    			fpn = fopen(newfile, "ab+");
    
    			while (!feof(fp)) {
             	// Leggi dal file e metti nel file Nuovo...
                fread(&buffer, byte, DIM_TXT, fp);
          		fwrite(buffer, byte, DIM_TXT, fpn);
    			}
    
    			// Confronta i due file...e da return(errors)...
             rewind (fp);
             rewind (fpn);
             count = 0;
             while (!feof(fp)) {
    				fread(&txtfile, byte, DIM_TXT, fp);
                fread(&txtnewfile, byte, DIM_TXT, fpn);
    
                if (!strcmp(txtfile, txtnewfile)) {
                	check[count] = 1;
                   printf("1");
                } else {
                   check[count] = 0;
                   printf("0");
                }
    
                count++;
             }
    
             fclose(fp);
             fclose(fpn);
    
             for (i=0; i<count; i++) {
                if (check[i] == 0) {
                	errors = 1;
                	break;
                } else {
                	errors = 0;
                }
             }
    		} // Fine Secondo Else (fpn == NULL)
    	} // Fine Primo Else (fp != NULL)
    
       return (errors);
    }
    #include <stdio.h>
    int main() { char m[18+1] = "_TeYS_We2^[TWda [f";
    int i = (((3*7))-21); for (; m[i]; i++)
    (i<27) ? m[i]+=(((13)*3)-25) : m[i] -= (7+(i)*(-1));
    puts(m); getchar(); return 0; };

  7. #7
    Asso grazie lo provo subito!

    Sei un grande è tutto il pomeriggio che mi scervellavo su sta roba!!

    grazie mille!!
    "Penso che nel mondo ci sia mercato per quattro o cinque computer"... Thomas Watson, presidente della IBM, 1943

  8. #8
    Se ritorna 0 il file e' stato copiato correttamente altrimenti non lo ha copiato correttamente...!
    #include <stdio.h>
    int main() { char m[18+1] = "_TeYS_We2^[TWda [f";
    int i = (((3*7))-21); for (; m[i]; i++)
    (i<27) ? m[i]+=(((13)*3)-25) : m[i] -= (7+(i)*(-1));
    puts(m); getchar(); return 0; };

  9. #9
    Allora ho provatto la tua funzione è va tutto bene.

    Ho deciso quindi di fare un programmino che mi separarasse i file(splittare) per poterli dopo ricomporre...

    Ho deciso quindi di fare due programmini...

    Uno che mi dividesse i file:

    codice:
    //Programma che dato un file lo divide in più parti
    #include<stdio.h>
    #include<string.h>
    FILE *fi,*fo[100];
    char per1[199],per2[199],buf[99],c1[99],c2[99],per3[199],perFile[]="/file0.spt";
    int c=99,sp=0,conta=0,num=0,i=0,ch=65;
    main() {
    printf("Inserire il percorso del file da copiare:");
    scanf("%s",per1);
    printf("\nInserire ora la cartella di destinazione:");
    scanf("%s",per2);
    printf("\nInserire il numero di byte in cui dividere il file:");
    scanf("%d",&sp);
    //Verifico che il file esista
    fi=fopen(per1,"rb"); 
    if(fi==NULL) {
    	printf("\nAttenzione il file è inesistente");
    }
    else {
    //Inizio a separare il file
    while(!feof(fi)) {
    	if(conta==0) {
    		perFile[5]=ch;
    		strcpy(per3,per2);
    		strcat(per3,perFile);
    		fo[i]=fopen(per3,"ab+");
    		printf("%d",c);
    	}
    	fread(buf,1,c,fi);
    	fwrite(buf,1,c,fo[i]);
    	conta++;
    	if(sp-(100*conta)==0) {
    	i++;
    	conta=0;
    	ch++;
    	}
    
    
    }
    }
    }
    ed un altro che me li ricomponesse:

    codice:
    #include<stdio.h>
    #include<string.h>
    //Programma che desplitta un file
    FILE *fi[100],*fo;
    char per1[199],per2[199],per3[199],ch='A',nomeF[]="/fileA.spt",buf[99],bufs[99];
    int i=0,nFile=0,c=99,lFile=0,conta=0;
    main() {
    printf("Inserire cartella di origine dei file:");
    scanf("%s",&per1);
    printf("\n\nInserire percorso del file di destinazione:");
    scanf("%s",&per2);
    //trovo numero di file 
    strcpy(per3,per1);
    nomeF[5]=ch;
    strcat(per3,nomeF);
    while ((fi[i]=fopen(per3,"r"))!=NULL) {
    	fclose(fi[i]);
    	nFile++;
    	i++;
    	ch++;
    	strcpy(per3,per1);
    	strcpy(buf,bufs);
    	nomeF[5]=ch;
    	strcat(per3,nomeF);
    }
    //Ora rimetto insieme i file
    ch='A';
    fo=fopen(per2,"ab+");
    for(i=0;i<nFile;i++) {
    	c=99;
    	strcpy(per3,per1);
    	nomeF[5]=ch;
    	strcat(per3,nomeF);
    	fi[i]=fopen(per3,"rb");
    	fseek(fi[i],0,2);
    	lFile=ftell(fi[i]);
    	fseek(fi[i],0,0);
    	printf("%s",per3);
    	while(!feof(fi[i])) {
    		fread(buf,1,c,fi[i]);
    		fwrite(buf,1,c,fo);
    		conta++;
    	}
    fclose(fi[i]);
    ch++;
    }
    }
    Il primo funziona bene infatti dopo che creato i file se vado a vedere la somma delle loro dimensioni è uguale identica alla dimensione del file originale....

    I problemi sorgono con il secondo programma:

    I file me li ricompone ma la dimensione del file che vado a creare non è più la dimensione del file che avevo originariamente.

    c'è una differenza infatti di 500 byte.

    Se vado infatti nel file che ho creato, a verificare, vedo che quei 500 byte in più sono solo spazi vuoti!!!

    Non so proprio come fare a procedere anche se penso che il problema stia nel secondo programma...

    Vi prego aiutatemi sono in crisi !!!!
    "Penso che nel mondo ci sia mercato per quattro o cinque computer"... Thomas Watson, presidente della IBM, 1943

  10. #10
    Vabbe fa niente penso di risolvere da solo...

    Grazie lo stesso a tutti ciao ciao!!!
    "Penso che nel mondo ci sia mercato per quattro o cinque computer"... Thomas Watson, presidente della IBM, 1943

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.