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

fopen no me detecta si fichero existe

Estas en el tema de fopen no me detecta si fichero existe en el foro de C/C++ en Foros del Web. Hola. ¿Alguien me puede comentar por qué el segundo código funciona y el primero no? (es decir, en el primero entra al IF pero no ...
  #1 (permalink)  
Antiguo 11/05/2011, 05:00
 
Fecha de Ingreso: diciembre-2010
Mensajes: 21
Antigüedad: 13 años, 10 meses
Puntos: 0
fopen no me detecta si fichero existe

Hola.

¿Alguien me puede comentar por qué el segundo código funciona y el primero no? (es decir, en el primero entra al IF pero no borra, y el segundo si borra)

Código:
main()
{
     if (fopen("C:/Program Files/PPP/medios/auxi.red","r") != NULL)
     {
            remove("C:/Program Files/PPP/medios/auxi.red");
     }
}
Código:
main()
{
      remove("C:/Program Files/PPP/medios/auxi.red");
}
En otro punto del programa tengo:

Código:
while (fopen("C:/Program Files/PPP/medios/auxi.red","r") == NULL)
     {}
auxi.red es un archivo que se genera cuando he acabado un proceso, y necesito un WHILE y esperar hasta que aparezca para seguir, por eso lo borro antes.

Saludos t gracias anticipadas.

Última edición por cirulo; 11/05/2011 a las 05:25
  #2 (permalink)  
Antiguo 11/05/2011, 05:45
Avatar de Heimish2000  
Fecha de Ingreso: enero-2011
Ubicación: Madrid
Mensajes: 844
Antigüedad: 13 años, 9 meses
Puntos: 89
Respuesta: fopen no me detecta si fichero existe

No lo puedes borrar porque lo tienes abierto. Abre un archivo con el notepad, vete a la carpeta donde está e intenta borrarlo...pues es lo mismo, si tienes un fichero abierto, no lo puedes borrar.
  #3 (permalink)  
Antiguo 12/05/2011, 00:24
 
Fecha de Ingreso: diciembre-2010
Mensajes: 21
Antigüedad: 13 años, 10 meses
Puntos: 0
Respuesta: fopen no me detecta si fichero existe

¿Pero if (fopen("C:/Program Files/PPP/medios/auxi.red","r") != NULL) abre el fichero? ¿siempre después de ejecutar una orden de este tipo tengo que cerrar el fichero?

Si la orden anterior no abre el fichero (lo que yo creía), entonces en los dos trozos de código que he puesto anteriormente el programa entra del mismo modo (con el fichero cerrado), pero en el primero no borra.

Tampoco entra en el WHILE, y no creo que sea un problema por estar abierto o cerrado.

¡Gracias!
  #4 (permalink)  
Antiguo 12/05/2011, 01:38
Avatar de Heimish2000  
Fecha de Ingreso: enero-2011
Ubicación: Madrid
Mensajes: 844
Antigüedad: 13 años, 9 meses
Puntos: 89
Respuesta: fopen no me detecta si fichero existe

Tu estás llamando a la función fopen, ¿Qué hace esa función? Abrir el fichero, por tanto, el fichero se abre, aunque sea una condición de un if, que eso no te equivoque. Si depuras paso a paso verás como entra en el fopen y abre el fichero.

En cualquier caso, si solamente quieres ver que el fichero exista y no hacer nada más con él, deberías buscar una función que haga eso, no abrirlo y cerrarlo que consume mucho más tiempo.
  #5 (permalink)  
Antiguo 12/05/2011, 14:34
 
Fecha de Ingreso: junio-2005
Mensajes: 93
Antigüedad: 19 años, 5 meses
Puntos: 9
Respuesta: fopen no me detecta si fichero existe

creo que el error es por que estas poniendo mas las diagonales, lo correcto sería

fopen("C:\\Program Files\\PPP\\medios\\auxi.red","r")
  #6 (permalink)  
Antiguo 14/05/2011, 20:38
 
Fecha de Ingreso: mayo-2010
Mensajes: 8
Antigüedad: 14 años, 5 meses
Puntos: 0
Respuesta: fopen no me detecta si fichero existe

Hay que "escapar" las contrabarras , tal y como dice dragg04...
  #7 (permalink)  
Antiguo 18/05/2011, 00:13
 
Fecha de Ingreso: diciembre-2010
Mensajes: 21
Antigüedad: 13 años, 10 meses
Puntos: 0
Respuesta: fopen no me detecta si fichero existe

El error estaba en lo que apuntaba Heimish2000. Lo de las contrabarras no eran mas que pruebas (el código original está con //).

Saludos y gracias por vuestra ayuda.
  #8 (permalink)  
Antiguo 18/05/2011, 09:04
 
Fecha de Ingreso: junio-2005
Mensajes: 93
Antigüedad: 19 años, 5 meses
Puntos: 9
Respuesta: fopen no me detecta si fichero existe

podrias mostra tu código completo?
  #9 (permalink)  
Antiguo 19/05/2011, 00:28
 
Fecha de Ingreso: diciembre-2010
Mensajes: 21
Antigüedad: 13 años, 10 meses
Puntos: 0
Respuesta: fopen no me detecta si fichero existe

Código:
void simulacion(char file[30])
{
     char archivo_simulacion[150] = "L:\\Programas\\Medidas\\Simulaciones\\";
     FILE *terminado = fopen("C:\\Program Files\\PPP\\medios\\auxi.red","r");
     int i;
    
     strcat(archivo_simulacion,file);
     
     if (terminado != NULL) 
     {
            fclose(terminado);
            remove("C:\\Program Files\\PPP\\medios\\auxi.red");
     }

     ShellExecute(NULL, TEXT("open"), TEXT("C:\\Program Files\\PPP\\ing.exe"), TEXT(archivo_simulacion), NULL, SW_SHOWNORMAL);

     Sleep(6500);

     SetCursorPos(500, 35);
     mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, GetMessageExtraInfo());
     mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, GetMessageExtraInfo());

     terminado = fopen("C:/Program Files/PPP/medios/auxi.red","r");

     while (terminado == NULL)
     {
          /*Sleep(1000);*/
          terminado = fopen("C:/Program Files/PPP/medios/auxi.red","r");
     }
     
     fclose(terminado);
}
Ésta es la parte del código que corre una simulación con un programa externo; la simulación ha acabado cuando aparece el archivo auxi.red.

Pegándolo veo una cosa de la que no me había dado cuenta. En algunas partes tengo \\ y en otras /; no las había corregido todas. El caso es que ShellExecute me daba error sino era con \\, pero el resto de órdenes parece que van bien con / (en principio quise usar / porque leí que funcionarían en Windows y Linux). ¿Dependiendo de la función a la que llame admiten las \\ o /?

Una curiosidad ya que estamos; ¿es un poco exagerado el WHILE comprobando continuamente? ¿es mejor poner ese retardo en cada iteracción?

Saludos.

Editado: el código anterior funciona a pesar de \\ y /.

Etiquetas: detecta, existe, fichero, fopen
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 17:40.