Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > C++ Builder
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 26-10-2008
11_8_88 11_8_88 is offline
Miembro
 
Registrado: may 2008
Posts: 25
Poder: 0
11_8_88 Va por buen camino
metodo write() de la clase TFileStream

Hola a todos, mi cuestion es por q no se usar el metodo write(const *void, int &) de la clase TFileStream, lo q intento en escribir un AnsiString en un fichero.

Muchas gracias.
Responder Con Cita
  #2  
Antiguo 26-10-2008
[coso] coso is offline
Miembro Premium
 
Registrado: may 2008
Ubicación: Girona
Posts: 1.678
Poder: 0
coso Va por buen camino
hola, prueba de hacer algo como

Código Delphi [-]
char *s;
TFileStream *T;
 
T = TFileStream->Create("c:\test.txt");
 
getmem(s,255*sizeof(char));
...
strcopy(s,"1234567890");
T->Write(s,4);
dispose(s);

o bien

Código Delphi [-]
string s;
 
s = "asdfjsdjfasdj";
...
T->Write(@s,4); // si no funciona con @, prueba con &
...
Responder Con Cita
  #3  
Antiguo 26-10-2008
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
No te doy respuesta inmediata, pero quizás pilles la idea.

El primer parámetro es un puntero a cualquier cosa, así que puedes mandar a escribir un integer, un Tbitmap o un string.

El segundo parámetro es la cantidad de bytes que contiene el primer parámetro, normalmente en delphi se usa la función "sizeof(nombrevariable)" como segundo parámetro.

Quizás un ansiString es ya un puntero a una cadena, por lo que quizás puedas escribir algo parecido a :
Código Delphi [-]
  ansistring *a = 'mi string superlarga';
  MiStream.write(a, sizeof(a));

Edito: coso ya te colaste en medio....

Suerte !!
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #4  
Antiguo 27-10-2008
11_8_88 11_8_88 is offline
Miembro
 
Registrado: may 2008
Posts: 25
Poder: 0
11_8_88 Va por buen camino
Muchas gracias por contestar, os paso el trozo de código, y os comento q no
me escribe toda la información, me escribe la de realx[0] y una parte de realx[1] y de momento no doy con el error.

TFileStream* rotar = new TFileStream ("hola.txt", fmCreate);

AnsiString coordenada_x;

coordenada_x = (AnsiString)realx[0] + " " + (AnsiString)realx[1] + " " + (AnsiString)realx[2];

rotar->Write(coordenada_x.data(),sizeof(coordenada_x));

delete rotar;
Responder Con Cita
  #5  
Antiguo 27-10-2008
jorge82 jorge82 is offline
Baneado
 
Registrado: jun 2005
Ubicación: Mérida, Yucatán, México
Posts: 75
Poder: 19
jorge82 Va por buen camino
Hola, extraído de la ayuda de C++ Builder:
Código:
...
In C++, sizeof(classtype), where classtype is derived from some base class, returns the size of the object (remember, this includes the size of the base class).
...
AnsiString está implementada como una clase, entonces sizeof(coordenada_x) va a devolver el tamaño en bytes del objeto, no de su contenido.

Código:
Length:
Returns the length of the AnsiString.

int __fastcall Length() const;

Description

Length returns the number of bytes in this AnsiString.
Luego entonces, para saber el numero de bytes que necesitas pasarle como parámetro al método Write debes usar Length:
Código Delphi [-]
...
  rotar->Write(coordenada_x.data(), coordenada_x.Length());
__________________
Un saludito.
Responder Con Cita
  #6  
Antiguo 27-10-2008
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.195
Poder: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
Cita:
Empezado por 11_8_88 Ver Mensaje
AnsiString coordenada_x;
rotar->Write(coordenada_x.data(),sizeof(coordenada_x));
Código:
rotar->Write(coordenada_x.data().c_str(), coordenada_x.Length());
Saludos.
Responder Con Cita
  #7  
Antiguo 27-10-2008
11_8_88 11_8_88 is offline
Miembro
 
Registrado: may 2008
Posts: 25
Poder: 0
11_8_88 Va por buen camino
Muchimas gracias amigos ya esta solucionado.

Un saludo
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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
problemas al agregar metodo a una clase base DANY OOP 1 14-01-2008 23:29:32
Forced write IVAND Firebird e Interbase 1 14-09-2006 10:56:22
Recibir en un metodo de una clase un record JorgeBec OOP 2 22-02-2005 06:04:12
¿Cómo puedo llamar al método heredado de una clase que no es el ancestro directo? sarackganda OOP 4 15-12-2003 23:19:49
Metodo que devuelva la lista de propiedades de la clase. nemo OOP 1 16-07-2003 17:10:02


La franja horaria es GMT +2. Ahora son las 00:39:13.


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