Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: mbed
Fork of VmRecorderV1dot1 by
Diff: FileManager/SistemaArchivos.cpp
- Revision:
- 0:3d456b8ce449
- Child:
- 2:e818c80e6d5c
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/FileManager/SistemaArchivos.cpp Mon Jun 15 15:34:27 2015 +0000
@@ -0,0 +1,186 @@
+#include "SistemaArchivos.h"
+
+extern ScreenManager SC;
+extern MSCFileSystem msc;
+
+extern DigitalOut myled;
+
+SistemaArchivos::SistemaArchivos(){
+ nViajes = 0;
+}
+
+void SistemaArchivos::addElement(char newElement[]){
+ FILE* file = fopen("/local/RideList.vme","a");
+ fprintf(file, "%s\n", newElement);
+ fclose(file);
+}
+
+int SistemaArchivos::reloadRideNames(){
+ // Se reinicia el número de viajes
+ nViajes = 0;
+ // Se abre el archivo de nombres de viajes
+ FILE* file = fopen("/local/RideList.vme","r");
+ if(file == NULL){
+ return 1;
+ }else{
+ while(!feof(file)){ // Mientras no se haya llegado al fin de fichero
+ //strcpy(names[nViajes], readTextLine(file));
+ fgets(names[nViajes], NCARACTERES, file);
+ // Se borra el último caracter de la cadena, el caracter '\n'
+ deleteLastChar(names[nViajes]);
+ //fscanf(file, "%s", names[nViajes]);
+ nViajes++;
+ }
+ // La última cadena es '\n', esta no se contara como cadena
+ nViajes--;
+ fclose(file);
+ return 0;
+ }
+}
+
+int SistemaArchivos::deleteRide(char *fileName){ // Borra los archivos asociados a un viaje, y lo borra de la lista de viajes
+ char file[64];
+
+ // Primero se intenta borrar el archivo de la memoria flash
+ strcpy(file, "/usb/");
+ strcat(file, fileName);
+ strcat(file, ".txt");
+
+ if(remove(file) != 0){ // Si no se pudo borrar se devuelve un 1
+ return 1;
+ }else{ // Si se borró el archivo se borra también de la lista de viajes
+ // Para ello primero se borra el viaje del array "names"
+ // Procedimiento:
+ // - Se busca el nombre en la lista
+ // - Una vez encontrada su posición todos los elementos por debajo de este se suben una posición
+ int pos = 0;
+
+ // - Se busca el nombre en la lista
+ while(strcmp(names[pos], fileName)){
+ pos++;
+ }
+
+ // En este momento la variable "pos" guarda la posición de memoria de el elemento a borrar
+ // Se aumenta en uno este índice para subir de posición los elementos por debajo de este
+ pos++;
+
+ // - Una vez encontrada su posición todos los elementos por debajo de este se suben una posición
+ for (int i = pos; i < nViajes; i++){
+ strcpy(names[i-1], names[i]);
+ }
+
+ // El número de viajes es una unidad menor
+ nViajes--;
+
+ // Se guarda la nueva lista de viajes
+ saveRideList();
+
+ return 0;
+ }
+}
+
+int SistemaArchivos::renameRide(char *fileName, char *newName){ // Cambia el nombre de los archivos asociados a un viaje, y de la lista de viajes
+ char oldFile[64];
+ char newFile[64];
+
+ // Primero se intenta cambiar el nombre del archivo de la memoria flash
+ strcpy(oldFile, "/usb/");
+ strcat(oldFile, fileName);
+ strcat(oldFile, ".txt");
+
+ strcpy(newFile, "/usb/");
+ strcat(newFile, newName);
+ strcat(newFile, ".txt");
+
+ if(file_rename(oldFile, newFile) != 0){ // Si no se pudo borrar se devuelve un 1
+ return 1;
+ }else{ // Si se cambió el nombre del archivo también se cambia el nombre en la lista de viajes
+ // Procedimiento:
+ // - Se busca el nombre antiguo en la lista
+ // - Una vez encontrada su posición se cambia su nombre
+ int pos = 0;
+
+ // - Se busca el nombre antiguo en la lista
+ while(strcmp(names[pos], fileName)){
+ pos++;
+ }
+
+ // - Una vez encontrada su posición se cambia su nombre
+ strcpy(names[pos], newName);
+
+ // Se guarda la nueva lista de viajes
+ saveRideList();
+
+ return 0;
+ }
+}
+
+bool SistemaArchivos::alredyExist(char *name){
+ bool value = false;
+ for(int i = 0; i < nViajes; i++){
+ if(!strcmp(names[i], name)){
+ value = true;
+ }
+ }
+ return value;
+}
+
+void SistemaArchivos::saveRideList(){
+ // Se sobreescribe el archivo "RideList.vme" con la lista de el array nombres
+ FILE* file = fopen("/local/RideList.vme","w");
+ for(int i = 0; i < nViajes; i++){
+ fprintf(file, "%s\n", names[i]);
+ }
+ fclose(file);
+}
+
+char* SistemaArchivos::getNameRide(int nameNumber){
+ return names[nameNumber];
+}
+
+int SistemaArchivos::getNrides(){
+ return nViajes;
+}
+
+//***********************************************************
+// file_rename: renames a file.
+// Kind of hoakey as it moves data instead of adjusting
+// the file name in the directory.
+// Checks to insure the file was renamed.
+// Returns -1 = error; 0 = success
+//***********************************************************
+int SistemaArchivos::file_rename(const char *oldfile, const char *newfile) {
+ int retval = 0;
+ int ch;
+
+ FILE *fpold = fopen(oldfile, "r");
+ if(fpold == NULL) {
+ retval = (-1);
+ }else{
+ FILE *fpnew = fopen(newfile, "w");
+
+ while (1) {
+ ch = fgetc(fpold);
+ if (ch == EOF) break;
+ fputc(ch, fpnew);
+ }
+
+ fclose(fpnew);
+ fclose(fpold);
+
+ fpnew = fopen(newfile, "r");
+ if(fpnew == NULL) {
+ retval = (-1);
+ }
+ else {
+ remove(oldfile);
+ }
+ fclose(fpnew);
+ }
+ return (retval);
+}
+
+void SistemaArchivos::deleteLastChar(char *str){ // Borra el último caracter de una cadena
+ str[strlen(str)-1] = '\0';
+}
+
\ No newline at end of file
