Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: comemelguevo en 20 Enero 2016, 16:55 pm



Título: Como abrir un directorio
Publicado por: comemelguevo en 20 Enero 2016, 16:55 pm
Hola buenas estoy realizando un programa que me han pedido en el cual tengo que leer de teclado el nombre de un archivo .srt, y abrir su directorio, cabe decir que todos los .srt, están en /datos/subtitulos/---.srt. Mi duda es como hacer para que esto vaya variando y como incluir el directorio, os incluyo mi función main, donde se tendría que abrir susodicho .srt:


int main(){
   bool si=true;
   const int MAX = 19;
   while(si){
      char NombreFichero[MAX];
      cout << "Un fichero de subtitulos"
      "(de practicasPROG1/datos/subtitulos): " << flush;
      cin >> NombreFichero;
      ifstream z;
      z.open(NombreFichero);
      if(contarSubtitulos(NombreFichero)>0){
         cout << "El fichero " << NombreFichero
               << " ha sido leido y contiene "
               << contarSubtitulos(NombreFichero)
               << " subtitulos que han sido leidos" << endl;
         ordenes();
         char d[10];
         char f[MAX];
         int e;
         int g;
         cout << "orden?";
         cin >> d >> f >> e >> g;
         convertir(d);
         convertir(f);
         operaciones(d, f, e, g, NombreFichero);
         if(strcmp(d,"fin")==0){
         si=false;
         }
         else if (strcmp(d,"fichero")==0){
            NombreFichero[MAX]=d[MAX];
            z.open(NombreFichero);
         }
      }
      else{
         cout << "El fichero " << NombreFichero << " no ha podido ser leido"
               << endl;
      }
   }
}
     


Título: Re: Como abrir un directorio
Publicado por: MAFUS en 20 Enero 2016, 19:22 pm
Crea, mediante array de strings o en un fichero de configuración, las rutas donde tu programa tendrá que mirar si hay el .srt que busca el usuario; y después que vaya probando ruta por ruta si el archivo existe y cargue la primera aparición o le diga al usuario que no existe.

Yo lo he hecho con arrays:
Código
  1. #include <stdio.h>
  2. #include <string.h>
  3.  
  4. int main()
  5. {
  6.    FILE *fp;
  7.    char cadena[80];
  8.    char directorio[2][80];
  9.    char archivo[80];
  10.    char ruta[165];
  11.    char const extension[] = ".txt";
  12.    int i;
  13.    int encontrado;
  14.    int caracteres;
  15.  
  16.    strcpy(directorio[0], "./prueba/");
  17.    strcpy(directorio[1], "./prueba2/");
  18.  
  19.    printf("Nombre el archivo a buscar: ");
  20.    scanf("%79s", archivo);
  21.    puts("\n");
  22.  
  23.    for(i = 0, encontrado = 0; i < 2 && !encontrado; ++i) {
  24.        ruta[0] = '\0';
  25.        strcat(ruta, directorio[i]);
  26.        strcat(ruta, archivo);
  27.        strcat(ruta, extension);
  28.        fp = fopen(ruta, "r");
  29.        if(fp)
  30.            encontrado = 1;
  31.    }
  32.  
  33.    if(encontrado) {
  34.        caracteres = printf(" Contenido de %s\n", archivo);
  35.        for(i = 0; i < caracteres; ++i)
  36.            printf("-");
  37.        puts("");
  38.        while(!feof(fp)) {
  39.            fscanf(fp, "%s", cadena);
  40.            puts(cadena);
  41.            cadena[0] = '\0';
  42.        }
  43.    }
  44.    else {
  45.        printf("El archivo %s no ha sido encontrado\n", archivo);
  46.    }
  47.    return(0);
  48. }

Así suponiendo que hay un archivo llamado prueba.txt en el directorio prueba, con texto en su interior 'prueba'; y un archivo llamado prueba2.txt en el directorio prueba2, con texto en su interior 'prueba2':

Nombre el archivo a buscar: prueba


 Contenido de prueba
---------------------
prueba




Nombre el archivo a buscar: prueba2


 Contenido de prueba2
----------------------
prueba2




Nombre el archivo a buscar: prueba3


El archivo prueba3 no ha sido encontrado



Título: Re: Como abrir un directorio
Publicado por: comemelguevo en 20 Enero 2016, 20:46 pm
Crea, mediante array de strings o en un fichero de configuración, las rutas donde tu programa tendrá que mirar si hay el .srt que busca el usuario; y después que vaya probando ruta por ruta si el archivo existe y cargue la primera aparición o le diga al usuario que no existe.

Yo lo he hecho con arrays:
Código
  1. #include <stdio.h>
  2. #include <string.h>
  3.  
  4. int main()
  5. {
  6.    FILE *fp;
  7.    char cadena[80];
  8.    char directorio[2][80];
  9.    char archivo[80];
  10.    char ruta[165];
  11.    char const extension[] = ".txt";
  12.    int i;
  13.    int encontrado;
  14.    int caracteres;
  15.  
  16.    strcpy(directorio[0], "./prueba/");
  17.    strcpy(directorio[1], "./prueba2/");
  18.  
  19.    printf("Nombre el archivo a buscar: ");
  20.    scanf("%79s", archivo);
  21.    puts("\n");
  22.  
  23.    for(i = 0, encontrado = 0; i < 2 && !encontrado; ++i) {
  24.        ruta[0] = '\0';
  25.        strcat(ruta, directorio[i]);
  26.        strcat(ruta, archivo);
  27.        strcat(ruta, extension);
  28.        fp = fopen(ruta, "r");
  29.        if(fp)
  30.            encontrado = 1;
  31.    }
  32.  
  33.    if(encontrado) {
  34.        caracteres = printf(" Contenido de %s\n", archivo);
  35.        for(i = 0; i < caracteres; ++i)
  36.            printf("-");
  37.        puts("");
  38.        while(!feof(fp)) {
  39.            fscanf(fp, "%s", cadena);
  40.            puts(cadena);
  41.            cadena[0] = '\0';
  42.        }
  43.    }
  44.    else {
  45.        printf("El archivo %s no ha sido encontrado\n", archivo);
  46.    }
  47.    return(0);
  48. }

Así suponiendo que hay un archivo llamado prueba.txt en el directorio prueba, con texto en su interior 'prueba'; y un archivo llamado prueba2.txt en el directorio prueba2, con texto en su interior 'prueba2':

Nombre el archivo a buscar: prueba


 Contenido de prueba
---------------------
prueba




Nombre el archivo a buscar: prueba2


 Contenido de prueba2
----------------------
prueba2




Nombre el archivo a buscar: prueba3


El archivo prueba3 no ha sido encontrado


Muchas gracias!!! :)