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