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 

leer un txt guardado en binario

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Consultas
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: leer un txt guardado en binario Responder citando

En un archivo de texto he guardado un dato de la siguiente manera:
#include <stdio.h>
Código:

if (abrir->Execute()){
        FILE *stream;
        char *s = Edit1->Text.c_str();
        stream = fopen(abrir->FileName.c_str(), "wb");
        fwrite(&s,sizeof(s),1,stream);
        fclose(stream);
        delete s;
}


Ahora lo que quiero es volver a leer ese dato desde el archivo pero sólo consigo sacar los datos binarios y no el texto "legible" que guardé.
He probado multitud de ejemplos pero no lo consigo, agradeceré una ayudita.
_________________
¡ADELANTE CON ESTE SUPER FORO!
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Tendrias que hacer algo asi:

Código:

struct DATOS MisDatos;
FILE *fp;
if ((fp = fopen("archivo","rb")==NULL)
{
     //no se pudo abrir el archivo..
}else{
    fread(&MisDatos, sizeof(struct DATOS),1,fp);
    fclose();
}


Tené en cuenta que si vas a guardar cadenas de caracteres, para no tener problemas al levantar los datos del archivo, lo mejor seria declarar la variable char de la siguiente forma:

Código:

char s[255];
// o si vas a declarar un puntero a char
char *s=NULL;
//y luego
s  = (char *)malloc(sizeof(char)*255);

_________________
Il Lupo
Volver arriba
Ver perfil de usuario Enviar mensaje privado MSN Messenger
Mensaje    Asunto: Responder citando

Gracias Lupo por tu interés pero no consigo compilar tu código tal y como me lo escribes, todo lo que he podido hacer es lo siguiente:
Código:

//-----------
struct mis_datos
{
    char cadena[255];
};
//-----------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
    struct mis_datos mas_datos;
    if (abrir->Execute()){
      FILE *fp = fopen(abrir->FileName.c_str(),"rb");
      fread((char*)&mas_datos,sizeof(mas_datos),1,fp);
      fclose(fp);
      ShowMessage(mas_datos.cadena);
    }
}

Pero sólo saca los caracteres binarios.
Tengo una línea de texto en un archivo "mi_archivo.txt" y está en binario (símbolos ilegibles) y lo que quiero es rescatarla tal y como la escribí (legible). He probado muchos códigos parecidos al tuyo y los pocos que me han funcionado sólo me han sacado una cadena de texto con los símbolos binarios. Llevo toda la tarde buscando y no hay manera.
_________________
¡ADELANTE CON ESTE SUPER FORO!
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Si te fijas con atención en lo que estas haciendo más arriba, realmente estas guardando la dirección del puntero de la cadena y no el contenido de la cadena.

Un detalle importante es que "sizeof" devuelve el tamaño del tipo de datos no del tamaño del contenido, o sea, tal como tu lo estas usando devuelve 4, que es el tamaño de un puntero. Lo puedes comprobar fácilmente porque el tamaño del archivo que te esta creando es de 4 bytes si lo miras. Otro detalle es que dices que el contenido será ilegible, y eso no es así, da igual que sea binario, mientras estés usando valores ASCII visibles (letras, números, etc...) si miras el fichero que has creado con un editor deberías ver la cadena que estas guardando...

Aquí tienes un pequeño ejemplo de como grabar una cadena y leerla:
Código:
// Grabamos
FILE* stream = fopen(abrir->FileName.c_str(), "wb");
char s[80];
// Aqui sizeof devolvera 80, que es el tamaño del array,
// da igual el tamaño real que tenga la cadena
lstrcpyn(s, Edit1->Text.c_str(), sizeof(s));
fwrite(s, sizeof(s), 1, stream);
fclose(stream);

// Leemos
FILE* stream = fopen(abrir->FileName.c_str(), "rb");
char s[80];
fread(s, sizeof(s), 1, stream);
Edit1->Text = s;
fclose(stream);


Bueno, si no entiendes algo de este pequeño ejemplo avísame.
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: leer un txt guardado en binario Responder citando

en este enlace se trato un tema bastante parecido estoy seguro que te va ha cerbir ..a mi me sirbio bastante...

https://cppbuilder.es/viewtopic.php?p=28327&highlight=ifstream+in+alarmas+bin+ios+in+ios+binary#28327
_________________
Salu2
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email MSN Messenger
Mensaje    Asunto: Responder citando

Gracias _Leo y Max, las explicaciones de _Leo me han ayudado a comprender un poco más el código, pero... me estoy dando cuenta que tal vez lo que pretendo no sea posible:
1º. Quiero escribir un texto "texto de preba" en un TEdit y al pulsar un botón guardarlo en un archivo de texto de manera que al abrir ese archivo con un editor su contenido sea ilegible.

2º. Quiero abrir ese archivo con mi programa y recuperar el texto escrito previamente.

Tal vez los tipos FILE, ofstream, ifstream y las funciones fread,fgets, etc... no sea lo que necesito, ni siquiera se si existen funciones nativas de C, C++ o C++ builder para ello.
Se que se puede hacer creando mis propias funciones para camuflar el texto con una rutina de encriptación y luego mandarlo a un objeto TStrings y guardarlo con SaveToFile y luego para leerlo invertir la función anterior de encriptado y listos, todo esto ya lo he hecho y me va bien, lo único que quería averiguar es si ya existen funciones que me ahorren ese trabajo y hagan esto o algo que sirva para lo mismo.
Gracias a todos.
_________________
¡ADELANTE CON ESTE SUPER FORO!
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Todas del foro y hay mas.....

https://cppbuilder.es/viewtopic.php?p=28173&highlight=encriptar#28173

y otra por si acaso
https://cppbuilder.es/viewtopic.php?p=25036&highlight=encriptar#25036

y otra mas!!!

https://cppbuilder.es/viewtopic.php?p=14513&highlight=encriptar#14513

de ultima prueba con la cryptoapi
_________________
Salu2
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email MSN Messenger
Mensaje    Asunto: Responder citando

Gracias max, pero no me refería a eso, yo ya tengo mis propias rutinas de encriptación de textos y me funcionan bien, sólo quería saber si alguien conoce funciones del API o de la VCL que nos faciliten el tener que desarrollar nuestros propios métodos de encriptación.
_________________
¡ADELANTE CON ESTE SUPER FORO!
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

hola foro estoy desempolvando tema viejo porque me ha interesado el tema de trabajar bases de datos con ficheros binarios cosa qeu aun no logro

_Leo dijo
Cita:

Otro detalle es que dices que el contenido será ilegible, y eso no es así, da igual que sea binario, mientras estés usando valores ASCII visibles (letras, números, etc...) si miras el fichero que has creado con un editor deberías ver la cadena que estas guardando...

Aquí tienes un pequeño ejemplo de como grabar una cadena y leerla:
Código:
// Grabamos
FILE* stream = fopen(abrir->FileName.c_str(), "wb");
char s[80];
// Aqui sizeof devolvera 80, que es el tamaño del array,
// da igual el tamaño real que tenga la cadena
lstrcpyn(s, Edit1->Text.c_str(), sizeof(s));
fwrite(s, sizeof(s), 1, stream);
fclose(stream);

// Leemos
FILE* stream = fopen(abrir->FileName.c_str(), "rb");
char s[80];
fread(s, sizeof(s), 1, stream);
Edit1->Text = s;
fclose(stream);


si se le quita la linea que pone _Leo :
linea
Código:
lstrcpyn(s, Edit1->Text.c_str(), sizeof(s));

entonces el texto se guardaria todo binario , es decir nunca se veria el Edit1 como texto legible, a lo que me refiero cuando yo guardo un texto con la funcion que da _Leo yo quiciera que todo lo salvado al fichero no sea legible por ningun gestor de texto que lo abra , solo que sea visible por mi programa , si lo hacemso como plantea _Leo se vera por ejemplo Edit+ x cantidad ed caracteres ilegibles, yo lo que deseo es qeu el Edit tambien se vea ilegible hasat que lo habra mi propio programa , se puede hacer esto sin tener que utilizar encriptamiento?

gracias
_________________
Todos somos ignorantes, lo que no todos ignoramos lo mismo...
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
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.