C/Visual C - Abrir Un Archivo

 
Vista:
sin imagen de perfil

Abrir Un Archivo

Publicado por kevin (1 intervención) el 09/11/2015 04:24:07
Tengo una duda con un ejercicio que llevo horas tratando de resolver. El Ejercicio es el siguiente:


Escribir las sentencias necesarias para abrir o crear un archivo de caracteres cuyo
nombre y acceso se introducen por teclado.




El programa debe tener un menú de opciones que permitan:



*Crear un archivo.

*Leer la información de un archivo existente y mostrar en pantalla la información
del fichero.
*Escribir en el archivo.

*Cerrar el archivo para guardar cambios.



La dificultad del mismo reside en que tengo que pedirle al usuario nombre y carpeta en la que se encuentra el archivo. Nos dieron la pista de que tenemos que concatenar esos dos datos para luego introducirlos en la funcion fopen, eso lo hice, la cosa es que el fopen lea la direccion... Esto es lo que llevo...


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main ()
{
	int opcion,a;
	char carpeta[20], arc[20], direc[5],aux[50];
	FILE *archivo;
 
	printf ("--------------------Bienvenido Al Programa De Los Archivos--------------------\n\n");                     //Presentacion del programa//
 
do{
		printf("\n|--------------------------------------------------|");
        printf("\n|                                                  |");
        printf("\n|                Menu Principal                    |");
        printf("\n|                                                  |");
        printf("\n|   1 Crear Un Archivo                             |");
        printf("\n|   2 Leer la informacion de un archivo existente  |");
        printf("\n|   3 Escribir en el archivo.                      |");
        printf("\n|   4 Cerrar el archivo para guardar cambios.      |");
        printf("\n|   9 Salir del Sistema                            |");
        printf("\n|                                                  |");
        printf("\n|--------------------------------------------------| \n");
        printf("\n Selecciona tu opcion  ");
		scanf("%d",&opcion);
		fflush (stdin);
        system("cls");
        switch(opcion)
		{
		case 1: printf ("\n Ya Creo La Carpeta Donde Almacenara Su Archivo? [1]=si. [0]=no = ");
		        scanf ("%i",&a);
		        fflush (stdin);
 
		        switch (a)
		        {
 
		        case 1:
		        	printf ("\n Indique Cual es el directorio de La Carpeta De Su Archivo ");
		        	printf ("\n [Ejemplo = D:]\n");
		            gets (direc);
 
		        	printf ("\n Indique Como Se LLama La Carpeta De Su Archivo = ");
		            gets (carpeta);
 
		            printf (" Indique Como Se Va A Llamar Su Archivo = ");
		            gets (arc);
 
		            strcat (aux,"\"");
		            strcpy (aux,direc);

		            strcat (aux,"\\");
                    strcat (aux,"\\");
 
                    strcat (aux,carpeta);
                    strcat (aux,"\\");
                    strcat (aux,"\\");
 
                    strcat (aux,arc);
 
                    strcat (aux,".txt");
                    strcat (aux,"\"");

                    puts (aux);

                    //Procedemos a abrir el archivo//
                     archivo = fopen ("aux","r");

		             if ( archivo == NULL )
	                {
	      	            printf("ERROR al procesar el archivo\n\n");
	    	        }
	                else
	                {
	    	            printf("Archivo creado Satisfactoriamente\n\n");
	    	        }
	    	        break;
 
                    break;
				case 0:
					printf ("\n Debe Crear Una Carpeta Donde Almacenar Su Archivo.\n\n");
					printf ("\n Siga los siguientes pasos si su equipo es Windows = \n\n");
					printf ("\n (1) Ingrese al menu de su computadora.");
                    printf ("\n (2) Haga click en Equipo.");
                    printf ("\n (3) Ingrese en el Disco Local (D:)");
                    printf ("\n (4) Cree Una Carpeta Con El Nombre De Su Preferencia.\n\n");
 
                    	system ("pause");
						return 0;
					break;
				default:
 
					printf ("\n La Opcion Introducida No Es Valida\n");
					system ("pause");
					return 0;
				break;
 
			   }
			   break;
	/*	case 2:   
		case 3: 
        case 4:
        case 9: printf("\n Ha seleccionado salir del programa.");
   		        break;
		default:printf("\n Ha Seleccionado Una Opcion No Valida, Por Favor Intente De Nuevo.");
		        break;
		        */
		};
	} while (opcion!=9);
}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 296
Bronce
Ha mantenido su posición en C/Visual C (en relación al último mes)
Gráfica de C/Visual C

Abrir Un Archivo

Publicado por aguml (272 intervenciones) el 09/11/2015 09:16:15
Sobre lo que indicas creo que el fallo lo tienes en todas las líneas como esta:
strcat (aux,"\\");
Qué deberían ser:
strcat (aux,"\\\\");
Ya que en C para las rutas se usa la doble barra invertida y tu solo colocas una.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Abrir Un Archivo

Publicado por Chema (234 intervenciones) el 09/11/2015 16:45:06
Ya que en C para las rutas se usa la doble barra invertida y tu solo colocas una.

¿De dónde sacas esas ideas tan raras?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 296
Bronce
Ha mantenido su posición en C/Visual C (en relación al último mes)
Gráfica de C/Visual C

Abrir Un Archivo

Publicado por agustin (272 intervenciones) el 10/11/2015 11:24:09
Un lapsus jejeje. Prueba esto a ver que tal:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
 
int main ()
{
	int opcion,a;
	char carpeta[20], arc[20], direc[5],aux[50];
	FILE *archivo=NULL;
 
   do{
      system("cls");
      printf ("--------------------Bienvenido Al Programa De Los Archivos--------------------\n\n");  //Presentacion del programa//
      printf("\n|--------------------------------------------------|");
      printf("\n|                                                  |");
      printf("\n|                Menu Principal                    |");
      printf("\n|                                                  |");
      printf("\n|   1 Crear Un Archivo                             |");
      printf("\n|   2 Leer la informacion de un archivo existente  |");
      printf("\n|   3 Escribir en el archivo.                      |");
      printf("\n|   4 Cerrar el archivo para guardar cambios.      |");
      printf("\n|   9 Salir del Sistema                            |");
      printf("\n|                                                  |");
      printf("\n|--------------------------------------------------| \n");
      printf("\n Selecciona tu opcion  ");
		scanf("%d",&opcion);
		fflush (stdin);
      system("cls");
 
      switch(opcion)
		{
		   case 1:
            printf ("\n Ya Creo La Carpeta Donde Almacenara Su Archivo? [1]=si. [0]=no = ");
            scanf ("%i",&a);
            fflush (stdin);
 
            switch (a)
            {
		         case 1:
		        	   printf ("\n Indique Cual es el directorio de La Carpeta De Su Archivo ");
		        	   printf ("\n [Ejemplo = D:]\n");
		            gets (direc);
		        	   printf ("\n Indique Como Se LLama La Carpeta De Su Archivo = ");
		            gets (carpeta);
		            printf (" Indique Como Se Va A Llamar Su Archivo = ");
		            gets (arc);
 
                  memset(aux,'\0',50);
		            strcat (aux,direc);
		            strcat (aux,"\\");
                  strcat (aux,carpeta);
                  strcat (aux,"\\");
                  strcat (aux,arc);
                  strcat (aux,".txt");
                  puts (aux);
 
                  //Procedemos a abrir el archivo//
                  if(archivo!=NULL){
                     fclose(archivo);
                  }
                  archivo = fopen (aux,"w+");
 
                  if ( archivo == NULL )
                  {
                     printf("ERROR al procesar el archivo\n\n");
	    	         }
                  else
                  {
                     printf("Archivo creado Satisfactoriamente\n\n");
	    	         }
                  system("PAUSE");
	    	         break;
 
               case 0:
					   printf ("\n Debe Crear Una Carpeta Donde Almacenar Su Archivo.\n\n");
					   printf ("\n Siga los siguientes pasos si su equipo es Windows = \n\n");
					   printf ("\n (1) Ingrese al menu de su computadora.");
                  printf ("\n (2) Haga click en Equipo.");
                  printf ("\n (3) Ingrese en el Disco Local (D:)");
                  printf ("\n (4) Cree Una Carpeta Con El Nombre De Su Preferencia.\n\n");
                  system ("pause");
					   break;
 
				   default:
                  printf ("\n La Opcion Introducida No Es Valida\n");
					   system ("PAUSE");
            }
 
			   break;
 
         case 2:
            printf ("\n Indique Cual es el directorio de La Carpeta De Su Archivo ");
            printf ("\n [Ejemplo = D:]\n");
            gets (direc);
            printf ("\n Indique Como Se LLama La Carpeta De Su Archivo = ");
            gets (carpeta);
            printf (" Indique Como Se Va A Llamar Su Archivo = ");
            gets (arc);
 
            memset(aux,'\0',50);
            strcat (aux,direc);
            strcat (aux,"\\");
            strcat (aux,carpeta);
            strcat (aux,"\\");
            strcat (aux,arc);
            strcat (aux,".txt");
            puts (aux);
 
            //Procedemos a abrir el archivo//
            if(archivo!=NULL){
               fclose(archivo);
            }
            archivo = fopen (aux,"r+");
 
            if ( archivo == NULL )
            {
               printf("ERROR al procesar el archivo\n\n");
            }
            //Instrucciones que leen lo que quieras del archivo
            printf("Datos leidos:\n");
            printf("============\n");
            fseek(archivo,0,SEEK_SET);
            do{
               fgets(aux,50,archivo);
               if(!feof(archivo))
                  printf("%s",aux);
            }while(!feof(archivo));
            system("PAUSE");
            break;
		   case 3:
            if ( archivo == NULL )
            {
               printf("ERROR al procesar el archivo\n\n");
            }
            else
            {
               //Instrucciones que escriben lo que quieras en el archivo
               printf("Introduce una cadena de no mas de %d caracteres a guardar:\n",sizeof(aux));
               fflush(stdin);
               fgets(aux,50,stdin);
               fputs(aux,archivo);
            }
            break;
         case 4:
            fclose(archivo);
            archivo=NULL;
            printf("Archivo cerrado\n\n");
            system ("PAUSE");
            break;
         case 9:
            printf("\n Ha seleccionado salir del programa.\n");
            system ("PAUSE");
            break;
 
         default:
            printf("\n Ha Seleccionado Una Opcion No Valida, Por Favor Intente De Nuevo.");
            break;
      }
   }while(opcion!=9);
   if(archivo != NULL)
      fclose(archivo);
   return 0;
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar