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

 
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 29-01-2004
doverzhoff doverzhoff is offline
Miembro
 
Registrado: ago 2003
Posts: 20
Poder: 0
doverzhoff Va por buen camino
Escribir un objeto en un TFileStream

Hola a todos, tengo el siguiente código en C++:
Código:
class disco
{
  public:
    int codigo;
    char titulo[30], interprete[30];
    double costo;

    void menu();
    void captura();
    void muestra();
    void busca();
    void modifica();
    void elimina();
} x;

void disco::captura()
{
  cout << "Codigo     : ";
  cin >> codigo;
  cout << "Titulo     : ";
  gets(titulo);
  cout << "Interprete : ";
  gets(interprete);
  cout << "Costo      : ";
  cin >> costo;

  ofstream escritor("D:\\disco.txt", ios::app);
  escritor.write((char *)&x, sizeof(x));
  escritor.close();
}

void disco::muestra()
{
  ifstream lector("D:\\disco.txt");

  while(!lector.eof() && !lector.fail())
  {
    lector.read((char *)&x, sizeof(x));

    if(lector.eof())
      break;

    cout << "\nCodigo     : " << codigo;
    cout << "\nTitulo     : " << titulo;
    cout << "\nInterprete : " << interprete;
    cout << "\nCosto      : " << costo;
    cout << endl;
  }

  getch();
}
Es muy fácil escribir y leer todos los datos del objeto y deseo es saber si en Delphi se puede hacer lo mismo, en especial las siguientes lineas:
Código:
escritor.write((char *)&x, sizeof(x));
lector.read((char *)&x, sizeof(x));
He tratado de hacerlo de distintas maneras, pero no se cómo, ya que en el código de C++ no hay nada de constructores, sólo se lee el objeto desde el archivo y ya.

Aqui le muestro una de tantas formas con las cuales traté de hacerlo, pero no funciona (la clase no es la misma del código de C++):
Código:
unit JoyClassU;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs;

const arcDATOS = 'Clientes.txt';

type
  TNombre      = String[50];
  TDireccion   = String[100];
  TDescripcion = String[200];

  TCliente = class
  public
    Nombre      : TNombre;
    Deuda       : Integer;
    Direccion   : TDireccion;
    Descripcion : TDescripcion;
    constructor Create(Nom : TNombre; Deu : Integer; Dir : TDireccion;
                      Des : TDescripcion);
    procedure Guarda;
    function Busca(Nom : TNombre) : TStrings;
end;

implementation

constructor TCliente.Create(Nom : TNombre; Deu : Integer; Dir : TDireccion;
                   Des : TDescripcion);
begin
  inherited Create;
  Nombre := Nom;
  Deuda := Deu;
  Direccion := Dir;
  Descripcion := Des;
end;

procedure TCLiente.Guarda;
var
  Archivo : TFileStream;
begin
  Archivo := TFileStream.Create(arcDATOS, fmOpenReadWrite);
  Archivo.Seek(0, soFromEnd);
  Archivo.WriteBuffer(Self, SizeOf(TCliente));
  Archivo.Free;
end;

function TCLiente.Busca(Nom : TNombre) : TStrings;
var
  Archivo  : TFileStream;
  tsClientes : TStrings;
  inBandera  : Integer;
begin
  Archivo := TFileStream.Create(arcDATOS, fmOpenRead);
  tsClientes := TStringList.Create;
  while Archivo.Position < Archivo.Size do
  begin
    Archivo.ReadBuffer(Self, SizeOf(TCliente));
    ShowMessage(Nombre);
    if Pos(Nom, Nombre) <> 0 then
    begin
      inBandera := 1;
      tsClientes.Add(Nombre);
    end;
  end;
  Archivo.Free;
  Result := tsClientes;
end;

end.
Lo que hace la funcion Busca es devolver los nombres que fueron en contrados en todo en archivo.

Ojalá me haya dado a entender, lo que quiero saber, es cómo escribir y leer un objeto en un archivo, ando muy perdido . Saludos

dvz
Responder Con Cita
 



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


La franja horaria es GMT +2. Ahora son las 14:43:11.


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