Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Problema con ficheros en C

Estas en el tema de Problema con ficheros en C en el foro de C/C++ en Foros del Web. Hola , vereis tengo un problema a la hora de leer un fichero , lo que el programa tiene que hacer es leer un fichero ...
  #1 (permalink)  
Antiguo 01/03/2013, 12:39
 
Fecha de Ingreso: marzo-2013
Mensajes: 4
Antigüedad: 11 años, 2 meses
Puntos: 0
Problema con ficheros en C

Hola , vereis tengo un problema a la hora de leer un fichero , lo que el programa tiene que hacer es leer un fichero en el que están los nombres de otros ficheros que tengo que son los que tengo que procesar para parsear y cosas así, he hecho lo siguiente:

#include <stdio.h>
#include <string.h>

void main(){


FILE *fichero;

char *cadena_puntero;

char cadena[100];

if((fichero=fopen("lista.txt","r"))==NULL){
printf("El fichero no existe\n");
return;
}

if((fichero=fopen("lista.txt","r"))!=NULL){

while ((fgets(cadena, 100, fichero)) != NULL)
{
cadena_puntero=cadena;
tratarFichero(cadena_puntero);


}//cierre deel while

y el metodo tratar fichero es este:

void tratarFichero(char *cadena_puntero){

FILE *fichero2;


if((fichero2=fopen(cadena_puntero,"w"))!=NULL){
printf("tratar fichero\n");
}else{
printf("El fichero no existe");
}

}
}

lo que me pasa es que me guarda los nombres en cadena_puntero bien pero luego en el tratar fichero en fopen(cadena_puntero,"w") no lo reconoce el nombre y va por el else , si en vez de poner cadena_puntero pongo directamente una de los nombres de los archivos como podría ser sustituir cadena_puntero por "archivo1.txt" entonces si lo reconoce el fichero ,tengo todos los ficheros en el directorio de trabajo pero no se porque no lo reconoce , si me podñeis ayudar , gracias.
  #2 (permalink)  
Antiguo 01/03/2013, 14:38
 
Fecha de Ingreso: diciembre-2011
Ubicación: CABA
Mensajes: 433
Antigüedad: 12 años, 4 meses
Puntos: 94
Respuesta: Problema con ficheros en C

Hola! el problema es porque fgets lee hasta N-1 caracteres de largo ó hasta encontrar un salto de linea(ENTER). Entonces al leer los nombres que se encuentran en lista.txt, fgets guarda el ENTER de cada linea en el arreglo cadena; por lo tanto no es lo mismo "archivo.txt" que "archivo.txt\n"(esto provoca que salte al else...)

Saludos
  #3 (permalink)  
Antiguo 01/03/2013, 14:40
 
Fecha de Ingreso: julio-2012
Mensajes: 375
Antigüedad: 11 años, 9 meses
Puntos: 28
Respuesta: Problema con ficheros en C

A mi me funciona perfectamente.

Cabe decir, que:

Código C:
Ver original
  1. if((fichero=fopen("lista.txt","r"))==NULL){
  2. printf("El fichero no existe\n");
  3. return;
  4. }

Código C:
Ver original
  1. if((fichero2=fopen(cadena_puntero,"w"))!=NULL){
  2. printf("tratar fichero\n");
  3. }else{
  4. printf("El fichero no existe");
  5. }

Estos dos mensajes de error son iguales, por lo que es posible que te equivoques al interpetrarlos.

Asegurate de que se llama lista.txt y no lista.txt.txt (suele pasar si tienes activado que se oculten las extensiones).
  #4 (permalink)  
Antiguo 01/03/2013, 14:42
 
Fecha de Ingreso: enero-2012
Ubicación: Buenos Aires
Mensajes: 745
Antigüedad: 12 años, 3 meses
Puntos: 35
Respuesta: Problema con ficheros en C

No es que va por el else, el problema es que la función tratarFichero() nunca llega a ejecutarse, porque fgets está retornando NULL. Al parecer tienes el archivo lista.txt vacío, ya que si lo llenas con algo funciona bien.

Te optimicé un poco el código. Si abris un fichero de modo "w" (write) siempre va a existir, ya que de lo contrario lo crea automáticamente.

Código C:
Ver original
  1. #include <stdio.h>
  2. #include <string.h>
  3.  
  4. void tratarFichero(char *cadena_puntero)
  5. {
  6.     FILE *fichero2;
  7.    
  8.     if ((fichero2 = fopen(cadena_puntero, "w")) != NULL) {
  9.         printf("tratar fichero\n");
  10.     }
  11. }
  12.  
  13. int main()
  14. {
  15.     char *cadena_puntero, cadena[100];
  16.     FILE *fichero;
  17.    
  18.     if ((fichero = fopen("lista.txt", "r")) == NULL) {
  19.         printf("El fichero no existe\n");
  20.         return 0;
  21.     } else {
  22.         while ((fgets(cadena, 100, fichero)) != NULL) {
  23.             cadena_puntero = cadena;
  24.             tratarFichero(cadena_puntero);
  25.         }
  26.     }
  27. }

Espero que te sirva.
  #5 (permalink)  
Antiguo 04/03/2013, 10:32
 
Fecha de Ingreso: marzo-2013
Mensajes: 4
Antigüedad: 11 años, 2 meses
Puntos: 0
Respuesta: Problema con ficheros en C

Hola , el problema era lo que decia cesar_casla , en el nombre de el fichero me estaba metiendo un \n y entonces por eso salia por el else , tuve que hacer un strtok(cadena_puntero,"\n"); y ya se solucionó , muchas gracias a todos los que contestasteis
  #6 (permalink)  
Antiguo 04/03/2013, 18:22
 
Fecha de Ingreso: diciembre-2011
Ubicación: CABA
Mensajes: 433
Antigüedad: 12 años, 4 meses
Puntos: 94
Respuesta: Problema con ficheros en C

Cita:
strtok(cadena_puntero,"\n");
no me parece lo mejor pero mientras funcione y entiendas esta bien; yo hubiese optado por algo como:
Código C:
Ver original
  1. num=strlen(cadena) - 1;
  2. cadena[num]='\0'; /* elimino el '\n' */

Saludos

Etiquetas: ficheros, programa, string
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 07:23.