archivos en c.

Iniciado por aggv1106, 29 Junio 2016, 16:38 PM

0 Miembros y 1 Visitante están viendo este tema.

aggv1106

hola, una consulta...en una parte de un ejercicio me pide que divida un archivo por medio de saltos de linea, el usuario debe ingresar en cuantas partes quiere dividir el archivo, el caso es que no se porque no puedo imprimir el salto de linea donde yo quiero, el código que hice es el siguiente:
#include<stdio.h>
int main(){
FILE *fp1;
int n,a=0, suma=0, cant/*cantidad de datos a agarrar por partes*/;
char c;
char entrada[100];
printf("Ingrese el nombre del archivo origen:\n");
scanf("%s",entrada);
if((fp1=fopen(entrada,"a+"))==NULL){
printf("\nError al abrir el archivo %s",entrada);
return 0;
}
printf("\n ¿en cuantas partes desea partir el archivo?: ");
scanf("%d", &n);
c=fgetc(fp1);//Acá calculo cuantos bytes tiene el archivo;
    while (!feof(fp1)){
            a=sizeof(c);
            suma=suma+a;
            a=0;
            c=fgetc(fp1);
    }

cant=suma/n;//cantidad de bytes que debo agarrar para cada parte.
suma=0;
rewind(fp1);
c=fgetc(fp1);// acá deberia imprimir el enter cuando alcancé la cantidad de bytes requeridos para una parte;
while(!feof(fp1)){
    a=sizeof(c);
    suma = suma+a;
    if (suma==cant){
        fprintf(fp1, "\n");
        suma=0;
        a=0;
    }
    a=0;
    c=fgetc(fp1);
}
fclose(fp1);

}

AlbertoBSD

#1
c=fgetc(fp1);//Acá calculo cuantos bytes tiene el archivo;


El que???? Asi no se calcula eso ahi solo obtienes el primer byte del contenido del archivo.

Para saber cuanto pesa un archivo tienes que usar la libreria sys/stat.h

#include <sys/stat.h>

//Dentro de main:

int size = fsize("nombre"):


//Funcion aparte.

off_t fsize(const char *filename) {
   struct stat st;

   if (stat(filename, &st) == 0)
       return st.st_size;

   return -1;
}


Fuente: http://stackoverflow.com/questions/8236/how-do-you-determine-the-size-of-a-file-in-c

Saludos!!
Donaciones
1Coffee1jV4gB5gaXfHgSHDz9xx9QSECVW

aggv1106

yo me referia a lo siguiente, si tengo un frase en el archivo: "holaquetal" y yo quiero separar la misma de la siguiente forma: hola \n que \n tal. con el fgetc y el while voy sacando y contando caracter por caracter para saber donde imprimir el salto de linea. o sea...no es que calculo cuanto pesa el archivo propiamente dicho, eso fue un error de tipeo mio.

AlbertoBSD

Hola ten en cuenta que estas imprimiendo en el mismo archivo que estas leyendo. con lo cual cada vez que imprimas un enter, realmente estas sustituyendo el caracter que se encontraba en una posicion adelante dwl cual acababas de leer. Necesitas

a) crear un nuevo archivo temporal donde se reflejen los cambios y hacer el intercambio de archvio

b) leer todo en memoria y reescribir el archvio desde 0 ya con loa cambios hechos.

Saludos
Donaciones
1Coffee1jV4gB5gaXfHgSHDz9xx9QSECVW

aggv1106

probaré con eso, gracias!