Club Builder - Foros de discusión Club Builder
Foro de C++Builder en español
 
 FAQFAQ   BuscarBuscar   MiembrosMiembros   Grupos de UsuariosGrupos de Usuarios   RegistrarseRegistrarse 
 PerfilPerfil   Entra para ver tus mensajes privadosEntra para ver tus mensajes privados   EntrarEntrar 

problemas en escritura y lectura de ficheros binarios

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Consultas
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: problemas en escritura y lectura de ficheros binarios Responder citando

bueno, a ver si alguien me puede ayudar.
mi aplicacion requiere escribir en el principio de un fichero su nombre, y despues escribir su contenido; y despues recuperar su nombre, y poder leer su contenido. es crear un especie de formato muy simple para un fichero. para hacer esto hace falta crear el fichero en modo binario. despues escribo el nombre del fichero:

char* nombre = new char[fich.Length() + 1]; //fich es un AnsiString
//con el nombre del fichero

strcpy(nombre, (ExtractFileName(fich)).c_str());

if((w = write(idfich, nombre, 255)) == -1)
{
close(idfich);
return;
}

y despues copio el contenido del fichero, de modo que vaya depues del nombre.

para recuperar el nombre, abro el fichero en modo binario y leo solo el principio del fichero:

char* nombre = new char[255];
void* mn = malloc(sizeof(char) * 255);
if(mn == NULL)
{
close(idfich);
Application->Terminate();
}

if(read(idfich,mn,(sizeof(char) * 255)) == -1)
{
close(idfich);
return;
}
nombre = static_cast<char*>(mn);

el problema esta en que la mayoria de las veces no recupera el nombre completo:
por ejemplo, si el nombre del fichero es pepito.zip , recupera pepito.zi| con esa barra |

¿donde esta el problema? ¿alguien me puede ayudar? gracias.
Volver arriba
Mensaje    Asunto: Responder citando

HOLA:

Creo que tu problema esta en lo que grabas.
strcpy introduce una serie de caracteres sobre el string, pero respeta el resto de los caracteres, asi que en realidad tu variable nombre del fichero esta grabando nombre_fichero + basura, que es lo que luego recupera.

Prueba esto

char* nombre = new char[fich.Length() + 1]; //fich es un AnsiString
//con el nombre del fichero

memset(nombre,'\x0',sizeof(nombre));
strcpy(nombre, (ExtractFileName(fich)).c_str());

By.
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

muchas gracias TOÑO, he puesto lo que me has dicho, y la verdad es que ahora funciona perfectamente. gracias por tu ayuda.
Volver arriba
Mostrar mensajes de anteriores:   
Cambiar a:  
No puedes publicar temas nuevos en este foro
No puedes responder a temas en este foro
No puedes editar tus mensajes en este foro
No puedes borrar tus mensajes en este foro
No puedes votar en las encuestas de este foro


Hosting WordPress Indedmedia desde 3,99 €
© 2002–2026 Club Builder · Funciona con phpBB.