Programación General > C/C++
Como guardo en archivo de texto
nicksynm:
Gracias, encontré esta pagina http://www.adrianxw.dk/SoftwareSite/Fin ... file1.html sobre el tema que me resulto muy util. Pero me salto un pequeño problema.
Cuando a FindFirstFile le pongo la ruta osea el nombre generico, yo no se el id del animal, por eso uso un sprintf para generar el nombre generico del archivo y que quede algo asi xxxxxc*.txt, el problema que esta funcion no usa un char sino lpcwstr, y no se como convertir de eso a char. Estuve buscando por google y encontre en otros legunajes o en formas muy molestas que no entiendo realmente.
Salud
ProfesorX:
Tengo una solucion "Facil", pero eso depende de si estas utilizando Visual Studio o no.
Solo ve a Propiedades de Proyecto/General/Juego de caracteres, y descativa el juego de caracteres Unicode, ponlo en "Sin establecer".
De esa formas podra utilizar un char* en lugar de un LPCSTR como parametro de FindFirstFile().
Saludos.
nicksynm:
Gracias otra vez, estuve toda la tarde buscando la solucion y en http://social.msdn.microsoft.com/Forums ... 6775346040. Me dieron varias opciones, una por el ejemplo es que ponga L"cad" en donde cad seria la cadena, estaba entre eso y hacer lo que me acabas de decir.
Con esto ya pude terminar el programa. Te agradezco el tiempo que te tomaste para ayudarme, sino no iba a terminar nunca más.
Salud2!
Pd: Pego todos los links no por el hecho de hacer spam, sino por si alguien le resulta útil mi código o lo que encontré. Ahora cuando termine de tipear voy a agregar el código completo.
Lo pegue en 2 partes, por que no me los queria tomar. Salud
T
--- Código: C ---rabajo practico obligatorio: Sistema centralizado de historia clínica de animales */ /* *************** A R C H I V O S D E C A B E C E R A ************* */#include <stdio.h>#include <conio.h>#include <string.h>#include <stdlib.h>#include <time.h>#include <windows.h> /* ******* D E C L A R A C I O N E S ******* */#pragma warning (disable:4996)#pragma warning (disable:4101)#define ruta " "#define LARCHFOTO 60 /* Path/nombre archivo foto */#define LESP 50 /* Especie */#define LRAZA 50 #define MIX 100#define MAX 260#define CANT 100 /* ******* D E C L A R A C I O N E S M E N U******* */ #define ALTA 1#define MODIF 2#define CONSULTA 3#define VACUNAS 4#define ALERGIAS 5#define HISTORIAL 6#define FOTO 7#define SALIR 8#define ESPECIE 9#define RAZA 10#define FECH 11#define SEXO 12#define PATHFOTO 13#define SALIRMOD 14 /* *** D E C L A R A C I O N E S D E T I P O S D E D A T O S *** */ typedef struct { int identificador; /* 4 dígitos*/ char especie[LESP]; char raza [LRAZA]; struct { int aa, mm, dd; } fechaNac; char sexo; char archFoto [LARCHFOTO]; } sanimal; typedef struct n { sanimal animal; struct n *sig; }nodo, *pNodo; typedef struct { char motivo[MIX]; char diagnostico[MAX]; char tratamiento[MAX]; char veterinario[MIX]; struct{ int aa, mm, dd; }fechacontrol; }sconsulta; typedef struct { char vacuna[MIX]; char plansatinario[MIX]; char planaplicacion[MIX]; struct{ int aa, mm, dd; }fechavenc; char observaciones[MAX]; }svacuna; typedef struct { struct{ int aa, mm, dd; }fecha; char alergia [MIX]; char trata[MAX]; /*tratamiento*/ char observ [MAX]; /*observaciones*/ }salergia; /* typedef struct { DWORD dwFileAttributes; FILETIME ftCreationTime; FILETIME ftLastAccessTime; FILETIME ftLastWriteTime; DWORD nFileSizeHigh; DWORD nFileSizeLow; DWORD dwReserved0; DWORD dwReserved1; TCHAR cFileName[ MAX_PATH ]; TCHAR cAlternateFileName[ 14 ]; }WIN32_FIND_DATA;*/ /*la identificacion de consulta, vacunas y alergias, es la misma si hablamos del mismo animal, creo que es asi*//* ******** D E C L A R A C I O N E S D E F U N C I O N E S ******* */ int menu(void);void cargarlista(pNodo *cabeza);void alta(pNodo *cabeza); int menumod (void); void modificar(pNodo *cabeza);void infconsultas(pNodo cabeza);void infalergias(pNodo cabeza); void infvacunacion(pNodo cabeza);void hiscomp(pNodo cabeza);void fotoanimal(pNodo cabeza);void guardararchivo(pNodo *cabeza); void imprimirvacunas(pNodo cabeza);void imprimiralergias(pNodo cabeza);void imprimirconsultas(pNodo cabeza); /* ********* M A I N ******** */int main (){ pNodo cabeza; int opc=0; int idanimal=0; cabeza=NULL; printf("Bienvenido al sistema de gestion de clinicas veterinariasnna"); while((opc=menu())!=SALIR) { switch(opc) { case ALTA: alta(&cabeza); break; case MODIF: modificar(&cabeza); break; case CONSULTA: infconsultas(cabeza); break; case VACUNAS: infvacunacion(cabeza); break; case ALERGIAS: infalergias(cabeza); break; case HISTORIAL: hiscomp(cabeza); break; case FOTO: fotoanimal(cabeza); break; } }; guardararchivo(&cabeza); return 0;} /* ********* D E F I N I C I O N E S D E F U N C I O N E S ******** */ int menu (void){ int opc, rc; do{ printf("Ingrese la opcion deseadann"); printf("1- Alta animaln"); printf("2- Modificar Animaln"); printf("3- Agregar consultan"); printf("4- Agregar infomacion vacunasn"); printf("5- Agregar informacion alergiasn"); printf("6- Mostrar historial animaln"); printf("7- Ver foto animaln"); printf("8- SalirnnOpcion:n"); rc=scanf("%d",&opc); printf("a"); fgetc(stdin); }while(rc!=1 || opc<ALTA || opc>SALIR); return opc; scanf("%d",&opc); return opc;}/*menu de opciones*/void cargarlista(pNodo *cabeza){ pNodo nuevo; FILE *animales; char aux[100]; char aux2[100]; strcpy(aux,ruta); strcpy(aux2,"veterinaria.dat"); strcat(aux,aux2); printf("%s",aux2); animales=fopen("aux","rb"); if(animales==NULL) { printf("Se crea archivo nuevo"); animales=fopen("veterinaria.dat","wb"); return; } while(!feof(animales)) { nuevo= malloc(sizeof(nodo)); fwrite(&nuevo,sizeof(nodo),1,animales); *cabeza=nuevo; nuevo->sig=NULL; fwrite(&nuevo,sizeof(nodo),1,animales); } fclose(animales);}/*carga del archivo binario a la lista*/ void alta(pNodo *cabeza){ pNodo anterior; pNodo actual; pNodo nuevo; pNodo indice; indice=*cabeza; if(*cabeza==NULL) { nuevo=malloc(sizeof(nodo)); *cabeza=nuevo; nuevo->sig=NULL; nuevo->animal.identificador=1000; } else { nuevo=malloc(sizeof(nodo)); anterior=NULL; actual=*cabeza; while(actual!=NULL) { anterior=actual; actual=actual->sig; } anterior->sig=nuevo; nuevo->sig=NULL; }printf("Ingrese datos del animaln");printf("Ingrese especie:");gets(nuevo->animal.especie);printf("Ingrese raza:");gets(nuevo->animal.raza);printf("Ingrese fecha de nacimiento:n"); printf("Dia:");scanf("%d",&nuevo->animal.fechaNac.dd);while(nuevo->animal.fechaNac.dd > 31 || nuevo->animal.fechaNac.dd < 1){ printf("Dia:"); scanf("%d",&nuevo->animal.fechaNac.dd);}printf("Mes:");scanf("%d",&nuevo->animal.fechaNac.mm);while(nuevo->animal.fechaNac.mm > 12 || nuevo->animal.fechaNac.mm < 1){ printf("Mes:"); scanf("%d",&nuevo->animal.fechaNac.mm);}printf("Anio:");scanf("%d",&nuevo->animal.fechaNac.aa);while(nuevo->animal.fechaNac.aa > 3000 || nuevo->animal.fechaNac.aa < 1900){ printf("Anio:"); scanf("%d",&nuevo->animal.fechaNac.aa); }fflush(stdin); /*fflush cuando paso de entero a caracter para quitar el enter*/printf("Ingrese sexo: (M o F)");scanf("%c",&nuevo->animal.sexo); /*Nota: S cadena C caracter y lleva apersan)*/printf("Ingrese ruta de la foto: (Ej: C://animal.jpg)");scanf("%s",nuevo->animal.archFoto);if(nuevo->animal.identificador==1000){}else{ while(nuevo->animal.identificador!=1000){ indice=indice->sig; if(indice->sig==NULL){ nuevo->animal.identificador=indice->animal.identificador+1; } }}}/*funcion alta, cargar datos a la lista*/int menumod (void){ int opc, rc; opc=0; do{ printf("Ingrese la opcion deseadann"); printf("9- Modificar especien"); printf("10- Modificar razan"); printf("11- Modificar fecha de nacimientosn"); printf("12- Modificar sexon"); printf("13- Modificar path de la foton"); printf("14- Salir de modificarn"); rc=scanf("%d",&opc); printf("a"); fgetc(stdin); }while(rc!=1 || opc<RAZA || opc>SALIRMOD); return opc; scanf("%d",&opc); return opc;}/*menu de la opcion modificar*/ void modificar(pNodo *cabeza){ pNodo aux; int id=0, opc=0; scanf("%d",&id); aux=*cabeza; printf("Ingrese el id del animal a modificarn"); scanf("%d",&id); while(aux!=NULL){ if(aux->animal.identificador==id){ while((opc=menumod())!=SALIRMOD) { switch(opc) { case ESPECIE: printf("Ingrese nueva especien"); scanf("%s",aux->animal.especie); break; case RAZA: printf("Ingrese nueva razan"); scanf("%s",aux->animal.raza); break; case FECH: printf("Ingrese nueva fecha de nacimienton"); printf("Dia:"); scanf("%d",&aux->animal.fechaNac.dd); while(aux->animal.fechaNac.dd > 31 || aux->animal.fechaNac.dd < 1){ printf("Dia:"); scanf("%d",&aux->animal.fechaNac.dd); } printf("Mes:"); scanf("%d",&aux->animal.fechaNac.mm); while(aux->animal.fechaNac.mm > 12 || aux->animal.fechaNac.mm < 1){ printf("Mes:"); scanf("%d",&aux->animal.fechaNac.mm); } printf("Anio:"); scanf("%d",&aux->animal.fechaNac.aa); while(aux->animal.fechaNac.aa > 3000 || aux->animal.fechaNac.aa < 1900){ printf("Anio:"); scanf("%d",&aux->animal.fechaNac.aa); } break; case SEXO: printf("Ingrese nuevo sexo: (M o F)"); scanf("%c",&aux->animal.sexo); break; case PATHFOTO: printf("Ingrese la nueva ruta de la foto: (Ej: C://animal.jpg)"); scanf("%s",aux->animal.archFoto); break; } }; return; } else{ aux=aux->sig; if(aux==NULL){ printf("El Id ingresado no es validon"); } } }} /*funcion para modificar datos de la lista*/
--- Código: C ---void fotoanimal (pNodo cabeza){ int id=0; char start[MAX]={"start "}; printf("Ingrese el id del animal a mostrarn"); scanf("%d",&id); while(cabeza!=NULL){ if(cabeza->animal.identificador==id){ system(strcat(start,cabeza->animal.archFoto)); cabeza=NULL; } else{ cabeza=cabeza->sig; if(cabeza==NULL){ printf("El Id ingresado no es validon"); } } } }/*muestra la foto del animal*/ void infconsultas(pNodo cabeza){ FILE *consultas; sconsulta consulta; struct tm *OurT=NULL; int id=0; char c[MIX]={"c"}; char txt[MIX]= {".txt"}; char nombre[MAX]; printf("ingrese id animal que realizo la consulta:n"); scanf("%d",&id); while(cabeza!=NULL){ if(cabeza->animal.identificador==id){ printf("Ingrese datos de la consulta"); printf("Ingrese motivo de la consulta:n"); gets(consulta.motivo); printf("Ingrese diagnostico:n"); gets(consulta.diagnostico); printf("Ingrese tratamiento:n"); gets(consulta.tratamiento); printf("Ingrese veterinario que los reviso:n"); gets(consulta.veterinario); consulta.fechacontrol.dd=OurT->tm_yday; consulta.fechacontrol.mm=OurT->tm_mon; consulta.fechacontrol.aa=OurT->tm_year; sprintf(nombre,"%d%s%d%d%d%d%d%s",id,c,OurT->tm_yday,OurT->tm_mon,OurT->tm_year,OurT->tm_hour,OurT->tm_min,txt); consultas=fopen("nombre","wt"); fprintf(consultas,"%s,%s,%s,%s,%d,%d,%dn",consulta.motivo,consulta.diagnostico,consulta.tratamiento,consulta.veterinario,consulta.fechacontrol.dd,consulta.fechacontrol.mm,consulta.fechacontrol.aa); return; } else{ cabeza=cabeza->sig; if(cabeza==NULL){ printf("El Id ingresado no es validon"); } } }}/*crea archivos de consulta por animal*/void infalergias(pNodo cabeza){ FILE *alergias; salergia alergia; struct tm *OurT=NULL; int id=0; char c[MIX]={"a"}; char txt[MIX]= {".txt"}; char nombre[MAX]; printf("ingrese id animal con alergias:n"); scanf("%d",&id); while(cabeza!=NULL){ if(cabeza->animal.identificador==id){ printf("Ingrese datos de la alergia"); printf("Ingrese nombre de la alergia:n"); gets(alergia.alergia); printf("Ingrese tratamiento:n"); gets(alergia.trata); printf("Ingrese observaciones:n"); gets(alergia.observ); alergia.fecha.dd=OurT->tm_yday; alergia.fecha.mm=OurT->tm_mon; alergia.fecha.aa=OurT->tm_year; sprintf(nombre,"%d%s%d%d%d%d%d%s",id,c,OurT->tm_yday,OurT->tm_mon,OurT->tm_year,OurT->tm_hour,OurT->tm_min,txt); alergias=fopen("nombre","wt"); fprintf(alergias,"%s,%s,%s,%d,%d,%dn",alergia.alergia,alergia.trata,alergia.observ,alergia.fecha.dd,alergia.fecha.mm,alergia.fecha.aa); return; } else{ cabeza=cabeza->sig; if(cabeza==NULL){ printf("El Id ingresado no es validon"); } } }}/*crea archivos de alergias por animal*/void infvacunacion(pNodo cabeza){ FILE *vacunas; svacuna vacuna; struct tm *OurT=NULL; int id=0; char c[MIX]={"v"}; char txt[MIX]= {".txt"}; char nombre[MAX]; printf("ingrese id animal que recibio vacunas:n"); scanf("%d",&id); while(cabeza!=NULL){ if(cabeza->animal.identificador==id){ printf("Ingrese datos de la vacuna"); printf("Ingrese nombre de la vacuna:n"); gets(vacuna.vacuna); printf("Ingrese plan sanitario:n"); gets(vacuna.plansatinario); printf("Ingrese plan de aplicacion:n"); gets(vacuna.planaplicacion); printf("Ingrese observacions:n"); gets(vacuna.observaciones); vacuna.fechavenc.dd=OurT->tm_yday; vacuna.fechavenc.mm=OurT->tm_mon; vacuna.fechavenc.aa=OurT->tm_year; sprintf(nombre,"%d%s%d%d%d%d%d%s",id,c,OurT->tm_yday,OurT->tm_mon,OurT->tm_year,OurT->tm_hour,OurT->tm_min,txt); vacunas=fopen("nombre","wt"); fprintf(vacunas,"%s,%s,%s,%s,%d,%d,%dn",vacuna.vacuna,vacuna.plansatinario,vacuna.planaplicacion,vacuna.observaciones,vacuna.fechavenc.dd,vacuna.fechavenc.mm,vacuna.fechavenc.aa); return; } else{ cabeza=cabeza->sig; if(cabeza==NULL){ printf("El Id ingresado no es validon"); } } } }/*crea archivos de vacunacion por animal*/ void hiscomp(pNodo cabeza){ imprimirvacunas(cabeza);imprimiralergias(cabeza);imprimirconsultas(cabeza); }/*imprime el historial completo de un animal*/ void guardararchivo(pNodo *cabeza){ FILE *animales; pNodo auxiliar; char aux[100]; char aux2[100]; auxiliar=*cabeza; strcpy(aux,ruta); strcpy(aux2,"veterinaria.dat"); strcat(aux,aux2); printf("%s",aux2); animales=fopen("aux","wb"); while(auxiliar!=NULL){ fwrite(&auxiliar,sizeof(nodo),1,animales); auxiliar=auxiliar->sig; }}/*guarda la lista en un archivo binario*/ void imprimirvacunas(pNodo cabeza){ FILE *vacunas; HANDLE hFind; WIN32_FIND_DATA FindData; svacuna vacuna; int ErrorCode; int id; char generico[MAX]; char asterisco[MAX]={"v*.txt"}; char nombre [MAX]; printf("Ingrese id del animaln"); scanf("%d",&id); sprintf(generico,"%d%s",id,asterisco); while(cabeza!=NULL){ if(cabeza->animal.identificador==id){ hFind = FindFirstFile(L"generico", &FindData); if(hFind == INVALID_HANDLE_VALUE) { ErrorCode = GetLastError(); if (ErrorCode == ERROR_FILE_NOT_FOUND) { printf ("No existen vacunasn") ; } } else { vacunas=fopen("FindData.cFileName","rt"); while(!feof(vacunas)){ fscanf(vacunas,"%s,%s,%s,%s,%d,%d,%dn",vacuna.vacuna,vacuna.plansatinario,vacuna.planaplicacion,vacuna.observaciones,vacuna.fechavenc.dd,vacuna.fechavenc.mm,vacuna.fechavenc.aa); printf( "%sn,%sn,%sn,%sn,%dn,%dn,%dn", vacuna.vacuna,vacuna.plansatinario,vacuna.planaplicacion,vacuna.observaciones,vacuna.fechavenc.dd,vacuna.fechavenc.mm,vacuna.fechavenc.aa); } fclose(vacunas); while (FindNextFile(hFind, &FindData)){ if(hFind == INVALID_HANDLE_VALUE) { ErrorCode = GetLastError(); if (ErrorCode == ERROR_FILE_NOT_FOUND) { printf ("No se encontraron más archivos de vacunasn"); } else{ /*Printf("Se encontro un error FindFirstFile() returned error code:%d",ErrorCode); */} } else { vacunas=fopen("FindData.cFileName","rt"); while(!feof(vacunas)){ fscanf(vacunas,"%s,%s,%s,%s,%d,%d,%dn",vacuna.vacuna,vacuna.plansatinario,vacuna.planaplicacion,vacuna.observaciones,vacuna.fechavenc.dd,vacuna.fechavenc.mm,vacuna.fechavenc.aa); printf( "%sn,%sn,%sn,%sn,%dn,%dn,%dn", vacuna.vacuna,vacuna.plansatinario,vacuna.planaplicacion,vacuna.observaciones,vacuna.fechavenc.dd,vacuna.fechavenc.mm,vacuna.fechavenc.aa); } fclose(vacunas); } } } FindClose(hFind); } else{ cabeza=cabeza->sig; if(cabeza==NULL){ printf("El Id ingresado no es validon"); } } } }/*imprimir todos los archivos de vacunas por animal*/ void imprimiralergias(pNodo cabeza){ FILE *alergias; HANDLE hFind; WIN32_FIND_DATA FindData; salergia alergia; int ErrorCode; int id; char generico[MAX]; char asterisco[MAX]={"a*.txt"}; char nombre [MAX]; printf("Ingrese id del animaln"); scanf("%d",&id); sprintf(generico,"%d%s",id,asterisco); while(cabeza!=NULL){ if(cabeza->animal.identificador==id){ hFind = FindFirstFile(L"generico", &FindData); if(hFind == INVALID_HANDLE_VALUE) { ErrorCode = GetLastError(); if (ErrorCode == ERROR_FILE_NOT_FOUND) { printf ("No existen alergiasn") ; } } else { alergias=fopen("FindData.cFileName","rt"); while(!feof(alergias)){ fscanf(alergias,"%s,%s,%s,%d,%d,%dn",alergia.alergia,alergia.trata,alergia.observ,alergia.fecha.dd,alergia.fecha.mm,alergia.fecha.aa); printf( "%sn,%sn,%sn,%dn,%dn,%dn",alergia.alergia,alergia.trata,alergia.observ,alergia.fecha.dd,alergia.fecha.mm,alergia.fecha.aa); } fclose(alergias); while (FindNextFile(hFind, &FindData)){ if(hFind == INVALID_HANDLE_VALUE) { ErrorCode = GetLastError(); if (ErrorCode == ERROR_FILE_NOT_FOUND) { printf ("No se encontraron más archivos de alergiasn"); } else{ /*Printf("Se encontro un error FindFirstFile() returned error code:%d",ErrorCode); */} } else { alergias=fopen("FindData.cFileName","rt"); while(!feof(alergias)){ fscanf(alergias,"%s,%s,%s,%d,%d,%dn",alergia.alergia,alergia.trata,alergia.observ,alergia.fecha.dd,alergia.fecha.mm,alergia.fecha.aa); printf( "%sn,%sn,%sn,%dn,%dn,%dn",alergia.alergia,alergia.trata,alergia.observ,alergia.fecha.dd,alergia.fecha.mm,alergia.fecha.aa); } fclose(alergias); } } } FindClose(hFind); } else{ cabeza=cabeza->sig; if(cabeza==NULL){ printf("El Id ingresado no es validon"); } } }}/*imprimir todos los archivos de alergias por animal*/void imprimirconsultas(pNodo cabeza){ FILE *consultas; HANDLE hFind; WIN32_FIND_DATA FindData; sconsulta consulta; int ErrorCode; int id; char generico[MAX]; char asterisco[MAX]={"c*.txt"}; char nombre [MAX]; printf("Ingrese id del animaln"); scanf("%d",&id); sprintf(generico,"%d%s",id,asterisco); while(cabeza!=NULL){ if(cabeza->animal.identificador==id){ hFind = FindFirstFile(L"generico", &FindData); if(hFind == INVALID_HANDLE_VALUE) { ErrorCode = GetLastError(); if (ErrorCode == ERROR_FILE_NOT_FOUND) { printf ("No existen consultasn") ; } } else { consultas=fopen("FindData.cFileName","rt"); while(!feof(consultas)){ fscanf(consultas,"%s,%s,%s,%s,%d,%d,%dn",consulta.motivo,consulta.diagnostico,consulta.tratamiento,consulta.veterinario,consulta.fechacontrol.dd,consulta.fechacontrol.mm,consulta.fechacontrol.aa); printf("%sn,%sn,%sn,%sn,%dn,%dn,%dn",consulta.motivo,consulta.diagnostico,consulta.tratamiento,consulta.veterinario,consulta.fechacontrol.dd,consulta.fechacontrol.mm,consulta.fechacontrol.aa); } fclose(consultas); while (FindNextFile(hFind, &FindData)){ if(hFind == INVALID_HANDLE_VALUE) { ErrorCode = GetLastError(); if (ErrorCode == ERROR_FILE_NOT_FOUND) { printf ("No se encontraron más archivos de consultasn"); } else{ /*Printf("Se encontro un error FindFirstFile() returned error code:%d",ErrorCode); */} } else { consultas=fopen("FindData.cFileName","rt"); while(!feof(consultas)){ fscanf(consultas,"%s,%s,%s,%s,%d,%d,%dn",consulta.motivo,consulta.diagnostico,consulta.tratamiento,consulta.veterinario,consulta.fechacontrol.dd,consulta.fechacontrol.mm,consulta.fechacontrol.aa); printf("%sn,%sn,%sn,%sn,%dn,%dn,%dn",consulta.motivo,consulta.diagnostico,consulta.tratamiento,consulta.veterinario,consulta.fechacontrol.dd,consulta.fechacontrol.mm,consulta.fechacontrol.aa); } fclose(consultas); } } } FindClose(hFind); } else{ cabeza=cabeza->sig; if(cabeza==NULL){ printf("El Id ingresado no es validon"); } } }}/*imprimir todos los archivos de consultas por animal*/ [/code]
Navegación
[*] Página Anterior
Ir a la versión completa