C/Visual C - modificar archivos binarios

 
Vista:

modificar archivos binarios

Publicado por Gustavo (1 intervención) el 17/03/2006 21:09:45
Soy un poco nuevo en C++ y bo se como se puede hacer con fstream para sobreescribir (modificar) algun campo de algunos registros en un archivo binario que responden al formato indicado por un struct
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:modificar archivos binarios

Publicado por cris (44 intervenciones) el 18/03/2006 11:36:04
hola yo tambien son nueva en C++ y tengo problema parecido, tengo q buscar en un fichero un texto especifico y modificarlo. La busqueda ya esta echa pero modificarlo y mostrarlo modificado tampoco se, y no encuentro nada.
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

Solucion

Publicado por Gustavo (4 intervenciones) el 18/03/2006 13:41:55
Encontre UNA solucion mesclando algunas tecnicas
Te mando este ejemplo donde NomLista es un campo dentrO de un struct
Llamado varlista. EL ARCHIVO SE LLAMA LISTA.APL y tiene el mismo formato
del struct
Suerte

int nreg=0; // nro de registro por el que se avanza
int desplaza; // desplazamiento dentro del archivo medido en bytes

char cadetemp[30]; // cadena auxiliar

Listas VarLista; // Crear una variable de tipo Listas

fstream archivo; // creo un objeto de tipo archivo

// abrir el archivo para lectura y escritura
archivo.open("./Lista.alp",ios::in|ios::out); // para entrada y salida

if (archivo.is_open()) //verificar que se abrio
{
// ------ leer el primer registro ------
nreg =1; //nro del primer reg
desplaza = sizeof(VarLista)*(nreg-1); //calcular desplazamiento el menos uno es porque el primer registro comienza en la posicion cero
archivo.seekg(desplaza,ios::beg); //posicionarse para leer
// leer registro
archivo.read(reinterpret_cast<char *> (&VarLista), sizeof(VarLista));

// --------recorrer los registros modificando ---------------
while (!archivo.eof()&&!archivo.fail())
{

//---- armar el texto a modificar ------
strcpy(cadetemp,"Registro Numero "); // texto fijo en este ejemplo

// Modificar el contenido del campo asignandole el texto armado
strcpy(VarLista.NomLista,cadetemp);
archivo.seekp(desplaza,ios::beg); //posicionarse para escribir
// grabar el registro modificado
archivo.write(reinterpret_cast<const char *> (&VarLista), sizeof(VarLista));

// leer el proximo registro
nreg ++; //avanzar el nro de reg
desplaza = sizeof(VarLista)*(nreg-1); //calcular desplazamiento
archivo.seekg(desplaza,ios::beg); //posicionarse
archivo.read(reinterpret_cast<char *> (&VarLista), sizeof(VarLista));

}
// cerrar el archivo
archivo.close();
}
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:modificar archivos binarios

Publicado por Marci (5 intervenciones) el 19/03/2006 21:49:53
Para trabajar con archivos binarios, fstream tienes las funciones miembro:
write(const char*, int n);
read(char* s, int n, char c='\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