Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 18-10-2006
pelaorb68 pelaorb68 is offline
Miembro
 
Registrado: oct 2005
Posts: 32
Poder: 0
pelaorb68 Va por buen camino
Problema con TFileStream

Hola a todos nuevamente, estoy intentando utilizar TFileStream, pero no logro enterder su funcionamiento, por lo tanto no sé si es lo que necesito o estoy haciendo algo mal con él.
Resulta que quiero grabar unas cadenas de caracteres en archivo, pero que al editar el archivo sean caracteres ilegibles. Para ello estoy probando TFileStream. Según el código siguiente, FilesStream hace lo que necesito:

Código Delphi [-]
var
  fOut   : TFileStream;
  sLine: string;
begin
    sLine := 'Esta en una linea de Prueba con FileStream';
    fOut := TFileStream.Create(cFileName,fmCreate);
    fOut.Write(sLine,Length(sLine));
    fOut.Free;
end;

El punto es cómo hago ahora para leer el archivo recién creado y recuperar la información como la cadena string original?????

Desde ya muchas gracias por la ayuda que me puedan brindar.......
Responder Con Cita
  #2  
Antiguo 18-10-2006
[maeyanes] maeyanes is offline
Capo de los Capos
 
Registrado: may 2003
Ubicación: Campeche, México
Posts: 2.732
Poder: 24
maeyanes Va por buen camino
Me imagino que sería algo parecido:

Código Delphi [-]
var
  fIn: TFileStream;
  sLine: array [0..255] of Char;

begin
  fIn := TFileStream.Create(cFileName, fmOpenRead);
  try
    fIn.Read(sLine, 100); // Lee 100 bytes del archivo...
  finally
    fIn.Free
  end
end;


Saludos...
Responder Con Cita
  #3  
Antiguo 18-10-2006
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 24
seoane Va por buen camino
Vamos a ver, para grabar un string debes de hacer algo como esto:

Código Delphi [-]
var
  fOut   : TFileStream;
  sLine: string;
begin
    sLine := 'Esta en una linea de Prueba con FileStream';
    fOut := TFileStream.Create(cFileName,fmCreate);
    fOut.Write(PChar(sLine)^,Length(sLine)); // <--
    fOut.Free;
end;

Piensa que tal como lo tenias antes lo que mandabas escribir no era el contenido del string, si no la propia variable string que no es mas que un puntero.
Responder Con Cita
  #4  
Antiguo 18-10-2006
pelaorb68 pelaorb68 is offline
Miembro
 
Registrado: oct 2005
Posts: 32
Poder: 0
pelaorb68 Va por buen camino
Lo que pasa es que cuando hago el Write con Pointer, me graba la cadena tal cual como es, es decir, si alguien editara el archivo leería la cadena sin ningún problema.
Responder Con Cita
  #5  
Antiguo 18-10-2006
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 24
seoane Va por buen camino
Cita:
Empezado por pelaorb68
Lo que pasa es que cuando hago el Write con Pointer, me graba la cadena tal cual como es, es decir, si alguien editara el archivo leería la cadena sin ningún problema.
Y si lo haces de la otra manera lo que estas grabando es basura que se encuentra en memoria, esa información de poco te va a servir. Lo que tu necesitas es cifrar el texto antes de guardarlo.
Responder Con Cita
  #6  
Antiguo 18-10-2006
pelaorb68 pelaorb68 is offline
Miembro
 
Registrado: oct 2005
Posts: 32
Poder: 0
pelaorb68 Va por buen camino
Entiendo perfectamente, lo que ahora no logro entender es que sentido tiene el FileStream......cuando hace casi lo mismo que TextFile......

Voy a intentar cifrar el texto antes de grabar........

Muchísimas gracias por sus prontas respuestas......
Responder Con Cita
  #7  
Antiguo 18-10-2006
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 24
seoane Va por buen camino
Los stream son herramientas muy potentes, cuando trabajes un poco mas con ellos te darás cuenta . En cuanto a lo de cifrar el texto, dependiendo de la seguridad que necesites, puedes usar trucos sencillos como este http://www.clubdelphi.com/trucos/index.php?id=53 o incluso como este, que todavía es mas sencillo y evita ciertos problemas con el random al trabajar en diferentes compiladores:

Código Delphi [-]
function Cifrar(Texto: string; Clave: Byte): string;
var
  i: integer;
begin
  Result:= '';
  for i:= 1 to Length(Texto) do
    Result:= Result + IntToHex(Byte(Texto[ i ]) xor Clave,2);
end;

function Descifrar(Texto: string; Clave: Longint): string;
var
  i: integer;
begin
  Result:= '';
  while Length(Texto) > 0 do
  begin
    if not TryStrToInt('$'+Copy(Texto,1,2),i) then
    begin
      Result:= '';
      Exit;
    end;
    Result:= Result + Char(Byte(i) xor Clave);
    Delete(Texto,1,2);
  end;
end;

Si lo que necesitas es SEGURIDAD con mayúsculas, te sugiero utilices algún algoritmo de cifrado algo mas fuerte: AES, Serpent, etc ... Existen componentes para realizar ese tipo de cifrados. Si buscas en los foros encontraras información sobre alguno
Responder Con Cita
  #8  
Antiguo 18-10-2006
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Disculpad si digo algo que verdaderamente sea absurdo, pero, ¿cómo es que yo recuerdo haber leído en algún libro (creo que sobre el lenguaje C), incluso en el que venían ejemplos, acerca de escribir en un archivo de texto los caracteres que fueran menester pero en (aquí el posible absurdo) binario, de tal modo que en realidad los caracteres fueran "ilegibles", salvo cuando los leíamos de nuevo nosotros, claro?

Es que intuyo que el compañero iba por ahí... no tanto por cifrar el contenido del archivo, que son dos cosas distintas, si es que esta que comento tiene razón de ser. Pero, ¡yo recuerdo haberlo leído! Una pena que no recuerde mucho más que eso...

No se me escapa que pueden escribirse "records" en un archivo de manera que los datos que se vean en el mismo sean un conglomerado de caracteres sin sentido aparente, pero, yo me estoy refiriendo (y creo que el compañero también) a hacerlo, digamos, directamente, sin "records", sino con funciones de "entrada/salida" para tal menester.

¿Qué decís vuestras mercedes? ¿Deliro?
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #9  
Antiguo 18-10-2006
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 24
seoane Va por buen camino
Hombre Dec, me has dejado estrañado

En las cadenas de texto (strings) tanto en C como en delphi, se manejan de una forma similar (por lo menos internamente), cada caracter se corresponde con un byte. Si tu escribes esos bytes a un archivo, tal cual, tienes un archivo de texto completamente legible. El caracter 'A' es igual al byte 65, da lo mismo si en un archivo de texto guardas una 'A' que si en un archivo binario guardas el byte 65. La verdad me siento un poco tonto explicandote esto a ti que seguro ya lo sabes ....

Por ejemplo:
Código Delphi [-]
var
  F: File;
  T: TextFile;
  B: Byte;
begin
  AssignFile(T,'d:\1.txt');
  {$I-}
    Rewrite(T);
  {$I+}
  if IOResult=0 then
  begin
    Write(T,'Hola');
    CloseFile(T);
  end;

  AssignFile(F,'d:\1.bin');
  {$I-}
    Rewrite(F,1);
  {$I+}
  if IOResult=0 then
  begin
    B:= Ord('H');
    BlockWrite(F,B,1);
    B:= Ord('o');
    BlockWrite(F,B,1);
    B:= Ord('l');
    BlockWrite(F,B,1);
    B:= Ord('a');
    BlockWrite(F,B,1);
    CloseFile(F);
  end;
end;

En el ejemplo anterior, ambos archivos son iguales. Y el segundo no puede ser mas "binario" . La única forma de hacer ilegible una cadena es el cifrado, entendiendo que cifrado no solo incluye métodos de criptografía como AES, si no también métodos tan simples como cambiar cada carácter por otro.
Responder Con Cita
  #10  
Antiguo 18-10-2006
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Pues entonces debo estar confundiendo churras con merinas, como suele decirse.

Cita:
Empezado por Domingo
La verdad me siento un poco tonto explicandote esto a ti que seguro ya lo sabes ....
¡Huy, no creas! Yo es que engaño mucho.

Gracias Seoane por la explicación y todo.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Manejo enteros tipo short con TFileStream elcaracas C++ Builder 0 31-08-2005 16:24:05
Uso de TFileStream esocrates Varios 4 09-04-2005 23:47:17
Problemas al transferir un TFileStream JCR Internet 4 18-07-2004 03:25:38
Escribir un objeto en un TFileStream doverzhoff Varios 3 06-02-2004 04:00:33
TFileStream doverzhoff Varios 1 25-10-2003 18:49:38


La franja horaria es GMT +2. Ahora son las 03:54:20.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi