• Sábado 9 de Noviembre de 2024, 03:33

Autor Tema:  No me deja leer del fichero.  (Leído 2657 veces)

Aprendiz21Sam

  • Miembro activo
  • **
  • Mensajes: 32
    • Ver Perfil
No me deja leer del fichero.
« en: Jueves 13 de Mayo de 2010, 18:54 »
0
Buenas, tengo un problema para leer un archivo. El archivo está creado ("100%") seguro porque además lo he abierto con otro ejercicio, donde si puedo abrirlo en modo lectura.

Éste es el código...

Código: C
  1. /*Cabecera de las bibliotecas de C*/
  2. #include <stdio.h>
  3. #include <conio.h>
  4. #include <stdlib.h>
  5. #include <string.h>
  6.  
  7. /*Variables globales*/
  8.  
  9. /*Declaración de Macors (#define)*/
  10. #define Max 5
  11.  
  12. /*Cabecera de nuestras funciones*/
  13. void LeerFichero();
  14. void GuardarBina(char *fCadena2);
  15.  
  16. /*Programa principal*/
  17. int main()
  18. {
  19.   /*Declaración de mis variables principales*/
  20.   char Cadena[1000];
  21.   char Opc;
  22.  
  23.   /*Inicialización de mis variables*/
  24.  
  25.   /*Declaración de mis arrays*/
  26.  
  27.   /*Parámetros de entrada*/
  28.   do
  29.   {
  30.     system("cls");
  31.     printf("n1.Leer del fichero");
  32.     printf("n2.Salir");
  33.     Opc=getch();
  34.     switch(Opc)
  35.     {
  36.       case '1':
  37.         LeerFichero();
  38.         break;
  39.       case '2':
  40.         break;
  41.       default:
  42.         printf("nOpcion incorrecta");
  43.         getch();
  44.       }
  45.     }while(Opc!='2');
  46.  
  47.   /*Algoritmo principal*/
  48.  
  49.   /*Parámetros de salida*/
  50.  
  51.   /*Otros parámetros*/
  52.   getch();
  53.   return 0;
  54. }
  55.  
  56. /*Implementación de mis funciones*/
  57. void LeerFichero()
  58. {
  59.   FILE *Arc;
  60.   int i;
  61.   int Espacios=0;
  62.   char Cadena[Max];
  63.   char Opc, Opc2;
  64.   do
  65.   {
  66.     system("cls");
  67.     printf("n1.Mostrar contenido del fichero");
  68.     printf("n2.Mostrar numero de espacios del fichero");
  69.     printf("n3.Salir");
  70.     Opc=getch();
  71.     switch(Opc)
  72.     {
  73.       case '1':
  74.         if((Arc=fopen("Fichero.txt", "r"))==NULL)
  75.         { /*Control del error en la apertura*/
  76.           printf("nError en la apertura. Es posible que el fichero no exista");
  77.         }
  78.         else
  79.         {
  80.           while (!feof(Arc)) // Mientras no se llegue al final del archivo...
  81.           {
  82.             fgets(Cadena, 5, Arc);
  83.             printf("n%s", Cadena);
  84.             getch();
  85.             printf("nSi desea guardarlo en binario pulse 1");
  86.             Opc2=getch();
  87.             if(Opc=='1')
  88.             {
  89.               GuardarBina(Cadena);
  90.             }
  91.           }
  92.           fclose(Arc);
  93.         }
  94.         break;
  95.       case '2':
  96.         if((Arc=fopen("Fichero.txt", "r"))==NULL)
  97.         { /*Control del error en la apertura*/
  98.           printf("nError en la apertura. Es posible que el fichero no exista");
  99.         }
  100.         else
  101.         {
  102.           while (!feof(Arc)) // Mientras no se llegue al final del archivo...
  103.           {
  104.             for(i=0; i<Max; i++)
  105.             {
  106.               Cadena[i]=fgetc(Arc);
  107.               if(Cadena[i]=32)
  108.               {
  109.                 Espacios++;
  110.               }
  111.             }
  112.           }
  113.           fclose(Arc);
  114.         }
  115.           printf("nEl numero de espacios son: %d", Espacios);
  116.           break;
  117.       case '3':
  118.         break;
  119.         default:
  120.         printf("nOpcion incorrecta");
  121.         getch();
  122.     }
  123.   }while(Opc!='3');
  124. }
  125.    
  126. void GuardarBina(char *fCadena2)
  127. {
  128.   FILE *Arc;
  129.   if((Arc=fopen("EjercicioBin.txt", "ab"))==NULL)
  130.   { /*Control del error en la apertura*/
  131.     printf("nError en la apertura. Es posible que el fichero no exista");
  132.   }
  133.   else
  134.   {
  135.     fwrite(fCadena2, sizeof(char), 5, Arc);
  136.   }
  137.   fclose(Arc);
  138. }
  139.  
  140.  

Cuando pulso la opción de mostrar el contenido, o la de mostrar el número de espacios me da un error de apertura, indicándome que es posible que el fichero no exista, pero eso no es cierto ya que con otro programa si me abre el mismo fichero.

vite666

  • Nuevo Miembro
  • *
  • Mensajes: 13
    • Ver Perfil
Re: No me deja leer del fichero.
« Respuesta #1 en: Viernes 14 de Mayo de 2010, 06:50 »
0
tal vez por esta linea en donde "ab" no es un tipo valido de apertura
if((Arc=fopen("EjercicioBin.txt", "ab"))==NULL)

Aprendiz21Sam

  • Miembro activo
  • **
  • Mensajes: 32
    • Ver Perfil
Re: No me deja leer del fichero.
« Respuesta #2 en: Viernes 14 de Mayo de 2010, 09:15 »
0
"a" Abre un archivo existente para escritura en modo secuencial, añadiendo los
datos al final de los que haya. Si el archivo no existe, se crea.

"b" Abre en forma binaria.

Ese no es el fallo, además el fallo me lo da tanto al mostrar el array de caracteres como en mostrar el número de espacios.

No obstante, también puse "wb" (que no soluciona el código) y tampoco funciona la apertura.

Epa

  • Miembro MUY activo
  • ***
  • Mensajes: 242
  • Nacionalidad: ar
    • Ver Perfil
Re: No me deja leer del fichero.
« Respuesta #3 en: Viernes 14 de Mayo de 2010, 14:36 »
0
Aunque decis que el archivos lo abris con otra aplicacion, probaste crear un nuevo archivo? o copiar el que tenes y cambiarle el nombre?
The sweet smell of a great sorrow lies over the land.


Aprendiz21Sam

  • Miembro activo
  • **
  • Mensajes: 32
    • Ver Perfil
Re: No me deja leer del fichero.
« Respuesta #4 en: Sábado 15 de Mayo de 2010, 10:08 »
0
Si, he probado todo eso y sigue sin abrirme el archivo. No entiendo por qué ocurre esto, nunca me había pasado y yo creía que controlaba bien la apertura de ficheros. No veo ningún fallo en el código y tampoco en la carpeta donde tengo todos los archivos.

NICOLASBLUES

  • Nuevo Miembro
  • *
  • Mensajes: 10
    • Ver Perfil
Re: No me deja leer del fichero.
« Respuesta #5 en: Sábado 15 de Mayo de 2010, 22:15 »
0
yo lo probé y anda joya tuve un problema con el switch pero como tengo linux no tengo "getch"  fijate si el nombre del archivo esta perfectamente bien escrito por ahi en la carpeta lo tenes como "fichero.txt" ,osea , sin sin la "t" mayuscula  , otra cosa que esta mal es cuando contas los espacios en el la comparacion del "if" solomente pones un solo "=" y termina contando 30 espacios...



Saludos Cordiales. El Nico

Aprendiz21Sam

  • Miembro activo
  • **
  • Mensajes: 32
    • Ver Perfil
Re: No me deja leer del fichero.
« Respuesta #6 en: Domingo 16 de Mayo de 2010, 16:48 »
0
Sí, lo del espacio ha sido un descuido que no me he dado cuenta porque no ppdía abrir el archivo. Por todo lo demás está bien. Sigo sin saber por qué no podía abrir el fichero. Supuestamente tu sí puedes abrirlo así que el código no debe tener un error. He reinstalado el programa y ahora si me funciona. No se que podía estar pasando, si alguien le encuentra una explicación...