C/Visual C - Dividir un archivo en varios de igual tamanño en C

 
Vista:

Dividir un archivo en varios de igual tamanño en C

Publicado por Camilo Zuluaga (7 intervenciones) el 25/05/2005 22:08:52
Hola, se me presento un problema y necesito el código o que me expliquen como puedo dividir un archivo .txt en varias partes iguales, es decir si tengo un archivo de 6MB, necesito dividirlo en 2 archivos de 3MB cada uno o en 3 archivos de 2MB cada uno, si alguien sabe o tiene el código para esto se lo agradezsco
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Dividir un archivo en varios de igual tamanño e

Publicado por fernando.gomez (1603 intervenciones) el 25/05/2005 23:47:12

Supongamos que quieres dividir tu archivo de 6MB (6291456 bytes) en tres partes iguales, de 2MB (2097152 bytes) cada uno, y pasarlo a 3 archivos de texto diferentes. Tonz:

const unsigned long ulTotal = 6291456;
const unsigned long ulParcial = ulTotal / 3;

ifstream strmReader = "mi_archivo.txt";
ofstream strmWriter;
char* pBuffer = new char[ulParcial];

memset(pBuffer, 0, ulParcial);
strmReader.read(pBuffer, ulParcial);
strmWriter.open("mi_archivo_parte_1.txt");
strmWriter.write(pBuffer, ulParcial);
strmWriter.close();

memset(pBuffer, 0, ulParcial);
strmReader.read(pBuffer, ulParcial);
strmWriter.open("mi_archivo_parte_2.txt");
strmWriter.write(pBuffer, ulParcial);
strmWriter.close();

memset(pBuffer, 0, ulParcial);
strmReader.read(pBuffer, ulParcial);
strmWriter.open("mi_archivo_parte_3.txt");
strmWriter.write(pBuffer, ulParcial);
strmWriter.close();

strmReader.close();
delete []pBuffer;

Evidentemente esto no es lo más eficiente. Emplearás tanta memoria RAM como tamaño de las secciones a dividir. Además, se podría implementar con un bucle for, por ejemplo. Espero te sirva de ejemplo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Dividir un archivo en varios de igual tamanño e

Publicado por Camilo Zuluaga (7 intervenciones) el 26/05/2005 16:08:20
Muchas gracias Fernando lo voy a probar, tu aporte es de gran ayuda.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Dividir un archivo en varios de igual tamanño e

Publicado por Camilo Zuluaga (7 intervenciones) el 01/06/2005 03:49:35
Hola fernando, probe el código y me funciono a la perfección, pero creo que las funciones ifstream y ofstream son de c++, me gustaria saber si conoces otra forma como esta para dividir los archivos pero en funciones de c.

Gracias y que pena por la molestia.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Dividir un archivo en varios de igual tamanño e

Publicado por fernando.gomez (1603 intervenciones) el 01/06/2005 05:59:02
Por-su-pollo. fopen te regresa un puntero a una estructura FILE si abrió el archivo. Con ese puntero, fclose cierra el archivo. fread y fwrite leen y escriben respectivamente sobre el FILE* abierto. feof te devuelve TRUE si llegaste al final del archivo. fprintf escribe texto formateado (como con fprint). Finalmente, fseek te mueve a una posición determinada del archivo. Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Dividir un archivo en varios de igual tamanño e

Publicado por Camilo (7 intervenciones) el 02/06/2005 17:55:36
Hola fernando que pena tanta molestia, estuve mirando las formas de pasar el código que me diste a C.

const unsigned long ulTotal;
const unsigned long ulParcial = ulTotal / 3;

ifstream strmReader = "prueba.txt";
ofstream strmWriter;
char* pBuffer = new char[ulParcial];
memset(pBuffer, 0, ulParcial);
strmReader.read(pBuffer, ulParcial);
strmWriter.open("mi_archivo_parte_1.txt");
strmWriter.write(pBuffer, ulParcial);
strmWriter.close();

memset(pBuffer, 0, ulParcial);
strmReader.read(pBuffer, ulParcial);
strmWriter.open("mi_archivo_parte_2.txt");
strmWriter.write(pBuffer, ulParcial);
strmWriter.close();

memset(pBuffer, 0, ulParcial);
strmReader.read(pBuffer, ulParcial);
strmWriter.open("mi_archivo_parte_3.txt");
strmWriter.write(pBuffer, ulParcial);
strmWriter.close();

strmReader.close();
delete []pBuffer;
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Dividir un archivo en varios de igual tamanño e

Publicado por Camilo (7 intervenciones) el 02/06/2005 18:13:22
Hola fernando que pena tanta molestia, estuve mirando las formas de pasar el código que me diste a C.

const unsigned long ulTotal;
const unsigned long ulParcial = ulTotal / 3;

ifstream strmReader = "prueba.txt";
ofstream strmWriter;
char* pBuffer = new char[ulParcial];

memset(pBuffer, 0, ulParcial);
strmReader.read(pBuffer, ulParcial);
strmWriter.open("mi_archivo_parte_1.txt");
strmWriter.write(pBuffer, ulParcial);
strmWriter.close();

memset(pBuffer, 0, ulParcial);
strmReader.read(pBuffer, ulParcial);
strmWriter.open("mi_archivo_parte_2.txt");
strmWriter.write(pBuffer, ulParcial);
strmWriter.close();

memset(pBuffer, 0, ulParcial);
strmReader.read(pBuffer, ulParcial);
strmWriter.open("mi_archivo_parte_3.txt");
strmWriter.write(pBuffer, ulParcial);
strmWriter.close();

strmReader.close();
delete []pBuffer;

Pero no encontre la forma de hacerlo,

logrnado esto

char nombreAr[15] = "prueba.txt";
FILE *archivo;
archivo = fopen( nombreAr, "r" );

para leer el fichero, pero no encuentro la forma de escribir lo que hay en pBuffer en los nuevos archivos,

Yo se que debo crear el nuevo archivo con:

fopen(Nombre_nuevo_Archivo, "w")

pero como te mencione antes, no se como escribir lo que hay en pBffer en el nuevo archivo.

si conoces la forma explicamela por favor
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Dividir un archivo en varios de igual tamanño e

Publicado por fernando.gomez (1603 intervenciones) el 03/06/2005 00:19:17
Como te comentaba, fwrite te sirve para ese propósito.

FILE* pFIle = fopen(..blablabla...);
fwrite(pBuffer, sizeof(char), ulParcial, pFile);
fclose(pFile);

Este es un ejemplo más claro, lo tomé del MSDN:

#include <stdio.h>

int main( void )
{
FILE *stream;
char list[30];
int i, numread, numwritten;

/* Open file in text mode: */
if( (stream = fopen( "fread.out", "w+t" )) != NULL )
{
for ( i = 0; i < 25; i++ )
list[i] = (char)('z' - i);
/* Write 25 characters to stream */
numwritten = fwrite( list, sizeof( char ), 25, stream );
printf( "Wrote %d items\n", numwritten );
fclose( stream );

}
else
printf( "Problem opening the file\n" );

if( (stream = fopen( "fread.out", "r+t" )) != NULL )
{
/* Attempt to read in 25 characters */
numread = fread( list, sizeof( char ), 25, stream );
printf( "Number of items read = %d\n", numread );
printf( "Contents of buffer = %.25s\n", list );
fclose( stream );
}
else
printf( "File could not be opened\n" );
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar