Versión sin post-procesado del software del VmRideR
Dependencies: mbed
FileManager/SistemaArchivos.cpp@1:a3c9b672b8e2, 2015-06-15 (annotated)
- Committer:
- jjmedina
- Date:
- Mon Jun 15 15:44:11 2015 +0000
- Revision:
- 1:a3c9b672b8e2
- Parent:
- 0:3d456b8ce449
Prueba_deutsch
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
JuanManuelAmador | 0:3d456b8ce449 | 1 | #include "SistemaArchivos.h" |
JuanManuelAmador | 0:3d456b8ce449 | 2 | |
JuanManuelAmador | 0:3d456b8ce449 | 3 | extern ScreenManager SC; |
JuanManuelAmador | 0:3d456b8ce449 | 4 | extern MSCFileSystem msc; |
JuanManuelAmador | 0:3d456b8ce449 | 5 | |
JuanManuelAmador | 0:3d456b8ce449 | 6 | extern DigitalOut myled; |
JuanManuelAmador | 0:3d456b8ce449 | 7 | |
JuanManuelAmador | 0:3d456b8ce449 | 8 | SistemaArchivos::SistemaArchivos(){ |
JuanManuelAmador | 0:3d456b8ce449 | 9 | nViajes = 0; |
JuanManuelAmador | 0:3d456b8ce449 | 10 | } |
JuanManuelAmador | 0:3d456b8ce449 | 11 | |
JuanManuelAmador | 0:3d456b8ce449 | 12 | void SistemaArchivos::addElement(char newElement[]){ |
JuanManuelAmador | 0:3d456b8ce449 | 13 | FILE* file = fopen("/local/RideList.vme","a"); |
JuanManuelAmador | 0:3d456b8ce449 | 14 | fprintf(file, "%s\n", newElement); |
JuanManuelAmador | 0:3d456b8ce449 | 15 | fclose(file); |
JuanManuelAmador | 0:3d456b8ce449 | 16 | } |
JuanManuelAmador | 0:3d456b8ce449 | 17 | |
JuanManuelAmador | 0:3d456b8ce449 | 18 | int SistemaArchivos::reloadRideNames(){ |
JuanManuelAmador | 0:3d456b8ce449 | 19 | // Se reinicia el número de viajes |
JuanManuelAmador | 0:3d456b8ce449 | 20 | nViajes = 0; |
JuanManuelAmador | 0:3d456b8ce449 | 21 | // Se abre el archivo de nombres de viajes |
JuanManuelAmador | 0:3d456b8ce449 | 22 | FILE* file = fopen("/local/RideList.vme","r"); |
JuanManuelAmador | 0:3d456b8ce449 | 23 | if(file == NULL){ |
JuanManuelAmador | 0:3d456b8ce449 | 24 | return 1; |
JuanManuelAmador | 0:3d456b8ce449 | 25 | }else{ |
JuanManuelAmador | 0:3d456b8ce449 | 26 | while(!feof(file)){ // Mientras no se haya llegado al fin de fichero |
JuanManuelAmador | 0:3d456b8ce449 | 27 | //strcpy(names[nViajes], readTextLine(file)); |
JuanManuelAmador | 0:3d456b8ce449 | 28 | fgets(names[nViajes], NCARACTERES, file); |
JuanManuelAmador | 0:3d456b8ce449 | 29 | // Se borra el último caracter de la cadena, el caracter '\n' |
JuanManuelAmador | 0:3d456b8ce449 | 30 | deleteLastChar(names[nViajes]); |
JuanManuelAmador | 0:3d456b8ce449 | 31 | //fscanf(file, "%s", names[nViajes]); |
JuanManuelAmador | 0:3d456b8ce449 | 32 | nViajes++; |
JuanManuelAmador | 0:3d456b8ce449 | 33 | } |
JuanManuelAmador | 0:3d456b8ce449 | 34 | // La última cadena es '\n', esta no se contara como cadena |
JuanManuelAmador | 0:3d456b8ce449 | 35 | nViajes--; |
JuanManuelAmador | 0:3d456b8ce449 | 36 | fclose(file); |
JuanManuelAmador | 0:3d456b8ce449 | 37 | return 0; |
JuanManuelAmador | 0:3d456b8ce449 | 38 | } |
JuanManuelAmador | 0:3d456b8ce449 | 39 | } |
JuanManuelAmador | 0:3d456b8ce449 | 40 | |
JuanManuelAmador | 0:3d456b8ce449 | 41 | int SistemaArchivos::deleteRide(char *fileName){ // Borra los archivos asociados a un viaje, y lo borra de la lista de viajes |
JuanManuelAmador | 0:3d456b8ce449 | 42 | char file[64]; |
JuanManuelAmador | 0:3d456b8ce449 | 43 | |
JuanManuelAmador | 0:3d456b8ce449 | 44 | // Primero se intenta borrar el archivo de la memoria flash |
JuanManuelAmador | 0:3d456b8ce449 | 45 | strcpy(file, "/usb/"); |
JuanManuelAmador | 0:3d456b8ce449 | 46 | strcat(file, fileName); |
JuanManuelAmador | 0:3d456b8ce449 | 47 | strcat(file, ".txt"); |
JuanManuelAmador | 0:3d456b8ce449 | 48 | |
JuanManuelAmador | 0:3d456b8ce449 | 49 | if(remove(file) != 0){ // Si no se pudo borrar se devuelve un 1 |
JuanManuelAmador | 0:3d456b8ce449 | 50 | return 1; |
JuanManuelAmador | 0:3d456b8ce449 | 51 | }else{ // Si se borró el archivo se borra también de la lista de viajes |
JuanManuelAmador | 0:3d456b8ce449 | 52 | // Para ello primero se borra el viaje del array "names" |
JuanManuelAmador | 0:3d456b8ce449 | 53 | // Procedimiento: |
JuanManuelAmador | 0:3d456b8ce449 | 54 | // - Se busca el nombre en la lista |
JuanManuelAmador | 0:3d456b8ce449 | 55 | // - Una vez encontrada su posición todos los elementos por debajo de este se suben una posición |
JuanManuelAmador | 0:3d456b8ce449 | 56 | int pos = 0; |
JuanManuelAmador | 0:3d456b8ce449 | 57 | |
JuanManuelAmador | 0:3d456b8ce449 | 58 | // - Se busca el nombre en la lista |
JuanManuelAmador | 0:3d456b8ce449 | 59 | while(strcmp(names[pos], fileName)){ |
JuanManuelAmador | 0:3d456b8ce449 | 60 | pos++; |
JuanManuelAmador | 0:3d456b8ce449 | 61 | } |
JuanManuelAmador | 0:3d456b8ce449 | 62 | |
JuanManuelAmador | 0:3d456b8ce449 | 63 | // En este momento la variable "pos" guarda la posición de memoria de el elemento a borrar |
JuanManuelAmador | 0:3d456b8ce449 | 64 | // Se aumenta en uno este índice para subir de posición los elementos por debajo de este |
JuanManuelAmador | 0:3d456b8ce449 | 65 | pos++; |
JuanManuelAmador | 0:3d456b8ce449 | 66 | |
JuanManuelAmador | 0:3d456b8ce449 | 67 | // - Una vez encontrada su posición todos los elementos por debajo de este se suben una posición |
JuanManuelAmador | 0:3d456b8ce449 | 68 | for (int i = pos; i < nViajes; i++){ |
JuanManuelAmador | 0:3d456b8ce449 | 69 | strcpy(names[i-1], names[i]); |
JuanManuelAmador | 0:3d456b8ce449 | 70 | } |
JuanManuelAmador | 0:3d456b8ce449 | 71 | |
JuanManuelAmador | 0:3d456b8ce449 | 72 | // El número de viajes es una unidad menor |
JuanManuelAmador | 0:3d456b8ce449 | 73 | nViajes--; |
JuanManuelAmador | 0:3d456b8ce449 | 74 | |
JuanManuelAmador | 0:3d456b8ce449 | 75 | // Se guarda la nueva lista de viajes |
JuanManuelAmador | 0:3d456b8ce449 | 76 | saveRideList(); |
JuanManuelAmador | 0:3d456b8ce449 | 77 | |
JuanManuelAmador | 0:3d456b8ce449 | 78 | return 0; |
JuanManuelAmador | 0:3d456b8ce449 | 79 | } |
JuanManuelAmador | 0:3d456b8ce449 | 80 | } |
JuanManuelAmador | 0:3d456b8ce449 | 81 | |
JuanManuelAmador | 0:3d456b8ce449 | 82 | int SistemaArchivos::renameRide(char *fileName, char *newName){ // Cambia el nombre de los archivos asociados a un viaje, y de la lista de viajes |
JuanManuelAmador | 0:3d456b8ce449 | 83 | char oldFile[64]; |
JuanManuelAmador | 0:3d456b8ce449 | 84 | char newFile[64]; |
JuanManuelAmador | 0:3d456b8ce449 | 85 | |
JuanManuelAmador | 0:3d456b8ce449 | 86 | // Primero se intenta cambiar el nombre del archivo de la memoria flash |
JuanManuelAmador | 0:3d456b8ce449 | 87 | strcpy(oldFile, "/usb/"); |
JuanManuelAmador | 0:3d456b8ce449 | 88 | strcat(oldFile, fileName); |
JuanManuelAmador | 0:3d456b8ce449 | 89 | strcat(oldFile, ".txt"); |
JuanManuelAmador | 0:3d456b8ce449 | 90 | |
JuanManuelAmador | 0:3d456b8ce449 | 91 | strcpy(newFile, "/usb/"); |
JuanManuelAmador | 0:3d456b8ce449 | 92 | strcat(newFile, newName); |
JuanManuelAmador | 0:3d456b8ce449 | 93 | strcat(newFile, ".txt"); |
JuanManuelAmador | 0:3d456b8ce449 | 94 | |
JuanManuelAmador | 0:3d456b8ce449 | 95 | if(file_rename(oldFile, newFile) != 0){ // Si no se pudo borrar se devuelve un 1 |
JuanManuelAmador | 0:3d456b8ce449 | 96 | return 1; |
JuanManuelAmador | 0:3d456b8ce449 | 97 | }else{ // Si se cambió el nombre del archivo también se cambia el nombre en la lista de viajes |
JuanManuelAmador | 0:3d456b8ce449 | 98 | // Procedimiento: |
JuanManuelAmador | 0:3d456b8ce449 | 99 | // - Se busca el nombre antiguo en la lista |
JuanManuelAmador | 0:3d456b8ce449 | 100 | // - Una vez encontrada su posición se cambia su nombre |
JuanManuelAmador | 0:3d456b8ce449 | 101 | int pos = 0; |
JuanManuelAmador | 0:3d456b8ce449 | 102 | |
JuanManuelAmador | 0:3d456b8ce449 | 103 | // - Se busca el nombre antiguo en la lista |
JuanManuelAmador | 0:3d456b8ce449 | 104 | while(strcmp(names[pos], fileName)){ |
JuanManuelAmador | 0:3d456b8ce449 | 105 | pos++; |
JuanManuelAmador | 0:3d456b8ce449 | 106 | } |
JuanManuelAmador | 0:3d456b8ce449 | 107 | |
JuanManuelAmador | 0:3d456b8ce449 | 108 | // - Una vez encontrada su posición se cambia su nombre |
JuanManuelAmador | 0:3d456b8ce449 | 109 | strcpy(names[pos], newName); |
JuanManuelAmador | 0:3d456b8ce449 | 110 | |
JuanManuelAmador | 0:3d456b8ce449 | 111 | // Se guarda la nueva lista de viajes |
JuanManuelAmador | 0:3d456b8ce449 | 112 | saveRideList(); |
JuanManuelAmador | 0:3d456b8ce449 | 113 | |
JuanManuelAmador | 0:3d456b8ce449 | 114 | return 0; |
JuanManuelAmador | 0:3d456b8ce449 | 115 | } |
JuanManuelAmador | 0:3d456b8ce449 | 116 | } |
JuanManuelAmador | 0:3d456b8ce449 | 117 | |
JuanManuelAmador | 0:3d456b8ce449 | 118 | bool SistemaArchivos::alredyExist(char *name){ |
JuanManuelAmador | 0:3d456b8ce449 | 119 | bool value = false; |
JuanManuelAmador | 0:3d456b8ce449 | 120 | for(int i = 0; i < nViajes; i++){ |
JuanManuelAmador | 0:3d456b8ce449 | 121 | if(!strcmp(names[i], name)){ |
JuanManuelAmador | 0:3d456b8ce449 | 122 | value = true; |
JuanManuelAmador | 0:3d456b8ce449 | 123 | } |
JuanManuelAmador | 0:3d456b8ce449 | 124 | } |
JuanManuelAmador | 0:3d456b8ce449 | 125 | return value; |
JuanManuelAmador | 0:3d456b8ce449 | 126 | } |
JuanManuelAmador | 0:3d456b8ce449 | 127 | |
JuanManuelAmador | 0:3d456b8ce449 | 128 | void SistemaArchivos::saveRideList(){ |
JuanManuelAmador | 0:3d456b8ce449 | 129 | // Se sobreescribe el archivo "RideList.vme" con la lista de el array nombres |
JuanManuelAmador | 0:3d456b8ce449 | 130 | FILE* file = fopen("/local/RideList.vme","w"); |
JuanManuelAmador | 0:3d456b8ce449 | 131 | for(int i = 0; i < nViajes; i++){ |
JuanManuelAmador | 0:3d456b8ce449 | 132 | fprintf(file, "%s\n", names[i]); |
JuanManuelAmador | 0:3d456b8ce449 | 133 | } |
JuanManuelAmador | 0:3d456b8ce449 | 134 | fclose(file); |
JuanManuelAmador | 0:3d456b8ce449 | 135 | } |
JuanManuelAmador | 0:3d456b8ce449 | 136 | |
JuanManuelAmador | 0:3d456b8ce449 | 137 | char* SistemaArchivos::getNameRide(int nameNumber){ |
JuanManuelAmador | 0:3d456b8ce449 | 138 | return names[nameNumber]; |
JuanManuelAmador | 0:3d456b8ce449 | 139 | } |
JuanManuelAmador | 0:3d456b8ce449 | 140 | |
JuanManuelAmador | 0:3d456b8ce449 | 141 | int SistemaArchivos::getNrides(){ |
JuanManuelAmador | 0:3d456b8ce449 | 142 | return nViajes; |
JuanManuelAmador | 0:3d456b8ce449 | 143 | } |
JuanManuelAmador | 0:3d456b8ce449 | 144 | |
JuanManuelAmador | 0:3d456b8ce449 | 145 | //*********************************************************** |
JuanManuelAmador | 0:3d456b8ce449 | 146 | // file_rename: renames a file. |
JuanManuelAmador | 0:3d456b8ce449 | 147 | // Kind of hoakey as it moves data instead of adjusting |
JuanManuelAmador | 0:3d456b8ce449 | 148 | // the file name in the directory. |
JuanManuelAmador | 0:3d456b8ce449 | 149 | // Checks to insure the file was renamed. |
JuanManuelAmador | 0:3d456b8ce449 | 150 | // Returns -1 = error; 0 = success |
JuanManuelAmador | 0:3d456b8ce449 | 151 | //*********************************************************** |
JuanManuelAmador | 0:3d456b8ce449 | 152 | int SistemaArchivos::file_rename(const char *oldfile, const char *newfile) { |
JuanManuelAmador | 0:3d456b8ce449 | 153 | int retval = 0; |
JuanManuelAmador | 0:3d456b8ce449 | 154 | int ch; |
JuanManuelAmador | 0:3d456b8ce449 | 155 | |
JuanManuelAmador | 0:3d456b8ce449 | 156 | FILE *fpold = fopen(oldfile, "r"); |
JuanManuelAmador | 0:3d456b8ce449 | 157 | if(fpold == NULL) { |
JuanManuelAmador | 0:3d456b8ce449 | 158 | retval = (-1); |
JuanManuelAmador | 0:3d456b8ce449 | 159 | }else{ |
JuanManuelAmador | 0:3d456b8ce449 | 160 | FILE *fpnew = fopen(newfile, "w"); |
JuanManuelAmador | 0:3d456b8ce449 | 161 | |
JuanManuelAmador | 0:3d456b8ce449 | 162 | while (1) { |
JuanManuelAmador | 0:3d456b8ce449 | 163 | ch = fgetc(fpold); |
JuanManuelAmador | 0:3d456b8ce449 | 164 | if (ch == EOF) break; |
JuanManuelAmador | 0:3d456b8ce449 | 165 | fputc(ch, fpnew); |
JuanManuelAmador | 0:3d456b8ce449 | 166 | } |
JuanManuelAmador | 0:3d456b8ce449 | 167 | |
JuanManuelAmador | 0:3d456b8ce449 | 168 | fclose(fpnew); |
JuanManuelAmador | 0:3d456b8ce449 | 169 | fclose(fpold); |
JuanManuelAmador | 0:3d456b8ce449 | 170 | |
JuanManuelAmador | 0:3d456b8ce449 | 171 | fpnew = fopen(newfile, "r"); |
JuanManuelAmador | 0:3d456b8ce449 | 172 | if(fpnew == NULL) { |
JuanManuelAmador | 0:3d456b8ce449 | 173 | retval = (-1); |
JuanManuelAmador | 0:3d456b8ce449 | 174 | } |
JuanManuelAmador | 0:3d456b8ce449 | 175 | else { |
JuanManuelAmador | 0:3d456b8ce449 | 176 | remove(oldfile); |
JuanManuelAmador | 0:3d456b8ce449 | 177 | } |
JuanManuelAmador | 0:3d456b8ce449 | 178 | fclose(fpnew); |
JuanManuelAmador | 0:3d456b8ce449 | 179 | } |
JuanManuelAmador | 0:3d456b8ce449 | 180 | return (retval); |
JuanManuelAmador | 0:3d456b8ce449 | 181 | } |
JuanManuelAmador | 0:3d456b8ce449 | 182 | |
JuanManuelAmador | 0:3d456b8ce449 | 183 | void SistemaArchivos::deleteLastChar(char *str){ // Borra el último caracter de una cadena |
JuanManuelAmador | 0:3d456b8ce449 | 184 | str[strlen(str)-1] = '\0'; |
JuanManuelAmador | 0:3d456b8ce449 | 185 | } |
JuanManuelAmador | 0:3d456b8ce449 | 186 |