Veran, tengo el siguiente programa que utiliza archivos, lo que hace es leer un archivo, cuya estructura se comprone primeramente de una orden, comando, o sentencia a realizar, en este caso es ADD, PRINT o SORT, luego de la orden, en caso de ser ADD deben estar los datos de clave, nombre, edad, sexo, si la orden es PRINT entonces lo que debe estar despues es el nombre del archivo donde seran guardados los datos, SORT es solo para ordenar los datos de menos a mayor la clave.
Todo me anda perfecto, solo que tengo un archivo "auxiliar.txt" que es el que me ayuda a guardar los datos temporalmente ahi para luego guardarlos en un archivo cuando se presente la sentencia PRINT, tambien podria usar un arreglo de cadenas con tamaño dinamica, pero en este caso quiero hacerlo de esta manera, pues quiero aprender bien, bien archivos. Bueno, entonces, este archivo "auxiliar.txt" quisiera borrarlo una vez que termina el programa para que asi solo se vean los archivos creados, y para borrarlo utilizo la funcion remove, la cual en mi programa la uso una vez y me anda perfecto (pero es con otro archivo), pero cuando quiero borrar "auxiliar.txt" no lo borra, mas concretamente, no lo puede borrar, pues me regresa un valor de -1, osea que no tuvo exito, pues devuelve un 0 si si lo logro, y por mas vueltas que le doy al codigo no encuentro donde esta mi error, supuse que era que a lo mejor no habia puesto un fclose(), pero realmente que no lo encuentro.
Aqui les dejo el codigo, a lo mejor es otro error el que tengo, cuando miren el codigo, deseguro notaran otros errores, o codigo que pudo escribirse de mejor manera, lo se, pero por mientras quisiera arreglar solamente esto del remove()
Código C:
Ver original
#include <stdio.h> #include <stdlib.h> #include <conio.h> #include <string.h> #define ADD 0 #define PRINT 1 #define SORT 2 typedef struct Tdato{ long clave; char nombre[45]={0}; int edad; char sexo[10]; }tdato; void fcomandos( void ); int accion(FILE **archivo); void add(FILE **archivo); void add2(FILE **archivo); void print(FILE **archivo); void ordenar(void); const char* leelinea(FILE **archivo); int lineas(void); int main( void ) { fcomandos(); return 0; } void fcomandos( void ) { FILE *fcomandos; { switch(accion(&fcomandos)) { case ADD: add(&fcomandos); break; case PRINT: print(&fcomandos);; break; case SORT: ordenar(); break; case -1: break; } } } int accion(FILE **archivo) { char comando[7]; char comandos[3][7]={{"ADD"},{"PRINT"},{"SORT"}}; for(int i=0 ; i<3 ; i++) if(strcmpi(comandos[i],comando)==0) return i; return -1; } void add(FILE **archivo) { FILE *faux; tdato reg; char letra; int i=0; do { if(letra<48||letra>57) { reg.nombre[i]=letra; } i++; }while(letra<48||letra>57); reg.nombre[i]='\0'; } void print(FILE **archivo) { FILE *faux, *fnuevo; char nombre[15], letra; { } } void ordenar(void) { FILE *faux, *faux2; int nlineas, j, i; nlineas=lineas(); char linea1[100], linea2[100], letra; for(j=0;j<nlineas-2;j++) { for(i=0;i<nlineas-1;i++) { { } else { } } { if(letra!='.') } } } const char* leelinea(FILE **archivo) { char linea[100]={0}, letra; int i=0; do { linea[i]=letra; i++; } while(letra!='\n'); linea[i]='\0'; return linea; } int lineas(void) { FILE *faux; char letra; int lineas=0; { if(letra=='\n') lineas++; } return lineas-1; }
Tambien les dejo como es el archivo "comandos.txt", que realmente puse cosas al azar solo para probarlo.
Código:
Como podran ver en el codigo, en la linea 54, puse un printf para asi ver el valor que me regresaba remove("auxiliar.txt")ADD 334992 Lopez Loadpez adadsarmo 25 Masculino ADD 159742 algo super algootro 30 Femenino ADD 653217 apellido apellido apellido 95 Masculino ADD 753211 lololol lalala lelele 15 Masculino ADD 153116 jumdd juddm jummmm 10 Femenino PRINT file1.txt ADD 354992 Lopezfmkpez amkmrmo 25 Masculino ADD 159442 algo super algootro 30 Femenino print holamundo.txt SORT PRINT ordenados.txt ADD 147821 kmdnba smnf jnbbe mknds 25 Masculino print noordenados.txt sort print ordenados2.txt ADD 159753 najskdnabfjk ansdkjnajsdm 35 Femenino ADD 486123 kan abdjand bhyfbkjans sss 56 Masculino print noordenados2.txt sort print superordenados.txt
Y en la linea 150 utilizo un remove("auxiliar2.txt"), y me funciona perfectamente.
Bueno eso es todo, de antemano gracias.
EDIT: Ya encontre mi error, bastante obvio, pero bueno, a veces el error termina siendo super sencillo y no puedes creer que no lo habias visto antes, jaja, bueno, esta en las ultimas lineas, puse un fclose() despues de un return!! entonces cuando llegaba al return terminaba la funcion y jamas llegaba a cerrar el archivo, y este se quedaba abierto, una vez cambiando eso, todo me anduvo perfecto. Gracias a los que leyeron, aunque nadie contesto nada, r.r...
~saludos~