![]() |
![]() |
![]() |
![]() |
![]() |
FTP | ![]() |
![]() |
CCD | ![]() |
![]() |
Buscar | ![]() |
![]() |
Trucos | ![]() |
![]() |
Trabajo | ![]() |
![]() |
Foros | ![]() |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
![]() |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
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); } |
#2
|
|||
|
|||
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; } //--------------------------------------------------------------------------- |
#3
|
||||
|
||||
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. |
#4
|
|||
|
|||
![]() 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; |
![]() |
|
|
![]() |
||||
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 |
![]() |
|