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 Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 05-02-2008
romanuel romanuel is offline
Miembro
 
Registrado: feb 2008
Posts: 15
Poder: 0
romanuel Va por buen camino
Duda urgente con ficheros c++

No se porke despues de supuestamente salvar no me carga nada de el fichero anteriormente salvado... please alguna sugerencia

OJO "dic" es un map de la STL

map<AnsiString, Ansistring> dic

void Diccionario::Salvar(AnsiString n)
{
AnsiString *d;
int total=dic.size()*2;
d=new AnsiString[total];
map<AnsiString, AnsiString>::iterator iter=dic.begin();
int pos=0;

while(iter!=dic.end())
{
d[pos]=(*iter).first;
d[pos+1]=(*iter).second;
iter++;
pos+=2;
}

FILE*file=fopen(n.c_str(),"w+");
if(file!=NULL)
{
fwrite(&total,sizeof(int),1,file);
fwrite(d,sizeof(d),total,file);
}
fclose(file);
}
void Diccionario::Cargar(AnsiString n)
{
dic.clear();
AnsiString *d;
int total;
FILE*file=fopen(n.c_str(),"r+");
if(file!=NULL)
{
fread(&total,sizeof(int),1,file);
d=new AnsiString[total];
fread(d,sizeof(AnsiString),total,file);
for(int i=0; i<total; i+=2)
{
pair<AnsiString, AnsiString> p(d[i],d[i+1]);
dic.insert(p);
}
}
fclose(file);
}
Responder Con Cita
  #2  
Antiguo 25-02-2008
ucanneo ucanneo is offline
Miembro
 
Registrado: feb 2008
Posts: 30
Poder: 0
ucanneo Va por buen camino
En varias ocasiones no sólo basta con cerrar el archivo, sino explícitamente hacer una descarga de lo que tiene en el buffer hay metodos como el fflush(),

Pues bueno un sugerecia seria no complicar tanto lo que haces con memoria dinámica que "nunca liberas", ademas de que muchas veces a AnsiString le cuesta trabajo funcionar con ficheros estilo c, en fin, te recomendaria hacerlo de la forma tradicional, es más codigo pero no hay problemas, o usando la forma de Builder

#include <vcl.h>
void cargar( AnsiString Ruta)
{
TStringList* sl;
sl = new TStringList;
sl->LoadFromFile(Ruta);
/*
Ya que lo tienes en una StringList mandalo a donde te plazca, a
un memo a un edit, a un txt, donde sea
*/
delete sl;
}



void cargar( AnsiString Ruta )
{
TStringList* sl;
sl = new TStringList;
/*Aca las rutinas necesarias para guardar las cadenas de texto*/
sl->SAveToFile(Ruta);
delete sl;
}
_____________________________________________________________-

Si suponemos que no es texto lo que estas guardando
builder te ofrece otra alternativa

//---------------------------------------------------------------------------
void copiarArchivo( AnsiString &rutaArchivoOrigen,
AnsiString &nombreDestino )
{
if (!FileExists(rutaArchivoOrigen)) return;
if ( FileExists(nombreDestino)) DeleteFile(nombreDestino);
//probando la creacion po FORZOMETRIA

TFileStream *OldFile = new TFileStream(rutaArchivoOrigen,
fmOpenRead);
TFileStream *NewFile = new TFileStream(nombreDestino, fmCreate);
NewFile->CopyFrom(OldFile, OldFile->Size);
delete OldFile;
delete NewFile;
}
//---------------------------------------------------------------------------
Responder Con Cita
  #3  
Antiguo 25-02-2008
Avatar de Negriz
Negriz Negriz is offline
Miembro
 
Registrado: feb 2008
Ubicación: Some were inside Colombia
Posts: 123
Poder: 17
Negriz Va por buen camino
Miexperiencia en programacion no es mucha y no se de que tanta ayuda sea este comentario pero no se supone que cuando dices:
"FILE*file=fopen(n.c_str(),"w+"); "
al poner la W+ esto borra el contenido del asrchivo y si no existe lo crea...
porque no pruevas con r+ a ver que pasa...

Saludos y espero que te ayude.
Responder Con Cita
  #4  
Antiguo 26-02-2008
lfb lfb is offline
Miembro
 
Registrado: dic 2007
Posts: 29
Poder: 0
lfb Va por buen camino
Wink Otra

Hola colegas
Yo te recomiendo que para el trabajo con ficheros utilices la biblioteca <fstream.h> es una biblioteca super buena para estas cosas.
Te adelanto que:

Código:
 
ifstream filein("archivo.txt") ; // entrada 
 
ofstream fileout("archivo.txt");  // salida;
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
Urgente una duda acerca del nombre de un freeware Arcioneo Varios 5 18-07-2006 18:44:37
DUDA URGENTE!!! por ERCRIZEPORTA... (VIH)Lestat Conexión con bases de datos 6 27-06-2005 11:44:53
Urgente!! TEngo una duda!!! (VIH)Lestat Conexión con bases de datos 15 26-06-2005 02:11:45
duda urgente marianaf Varios 1 27-11-2003 00:13:05
Duda con 'Self' ...Urgente IVAND Varios 3 31-08-2003 17:13:10


La franja horaria es GMT +2. Ahora son las 12:27:04.


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