 |
Club Builder Foro de C++Builder en español
|
| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
Tugui Master


Registrado: 09 Nov 2002Mensajes: 663
|
Publicado: Sab 27 Ago, 2005 4:42 pm Asunto: leer un txt guardado en binario |
|
|
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 |
|
 |
Lupo Ens

Registrado: 15 Ago 2005Mensajes: 30Ubicación: Prov, Buenos Aires - Argentina
|
Publicado: Sab 27 Ago, 2005 9:05 pm Asunto: |
|
|
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 |
|
 |
Tugui Master


Registrado: 09 Nov 2002Mensajes: 663
|
Publicado: Sab 27 Ago, 2005 9:50 pm Asunto: |
|
|
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 |
|
 |
_Leo Site Admin

Registrado: 11 Ago 2002Mensajes: 1875Ubicación: Lanzarote - Islas Canarias (España)
|
Publicado: Sab 27 Ago, 2005 10:39 pm Asunto: |
|
|
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 |
|
 |
max Lt

Registrado: 12 Mar 2005Mensajes: 89Ubicación: Argentina Prov B.A Mar del Plata
|
|
| Volver arriba |
|
 |
Tugui Master


Registrado: 09 Nov 2002Mensajes: 663
|
Publicado: Dom 28 Ago, 2005 9:17 am Asunto: |
|
|
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 |
|
 |
max Lt

Registrado: 12 Mar 2005Mensajes: 89Ubicación: Argentina Prov B.A Mar del Plata
|
|
| Volver arriba |
|
 |
Tugui Master


Registrado: 09 Nov 2002Mensajes: 663
|
Publicado: Lun 29 Ago, 2005 10:36 pm Asunto: |
|
|
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 |
|
 |
ifrit Master


Registrado: 12 Jun 2007Mensajes: 509Ubicación: La Habana, Cuba
|
Publicado: Vie 10 Abr, 2009 4:54 am Asunto: |
|
|
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 |
|
 |
|
|
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
|
© 2002–2026 Club Builder · Funciona con phpBB.
|