elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Recopilación Tutoriales y Manuales Hacking, Seguridad, Privacidad, Hardware, etc


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  [Solucionado] comprobar si el fichero existe, variable tipo string
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [Solucionado] comprobar si el fichero existe, variable tipo string  (Leído 5,572 veces)
tonilogar

Desconectado Desconectado

Mensajes: 55


Ver Perfil
[Solucionado] comprobar si el fichero existe, variable tipo string
« en: 8 Junio 2011, 23:28 pm »

En esta aplicación, entro un dato con  getline  y utilizo el tipo de variable string por si el nombre tiene espacios.

Hay alguna forma de detectar si el fichero existe o no, con una variable del tipo string.

Parecido a como se hace con el variables de tipo char*.


 
Código
  1. int main ()
  2.  
  3. {
  4.  
  5.  char * Imagen;
  6.  
  7.  int com;
  8.  
  9.    cout <<  endl;
  10.  
  11.    cout <<  endl;
  12.  
  13.    cout << "selecciona imatge a transformar";
  14.  
  15.    cout <<  endl;
  16.  
  17.    cout <<  endl;
  18.  
  19.    cin >> Imagen;
  20.  
  21.    cout <<  endl;
  22.  
  23.  
  24.  
  25. cout <<  Imagen;
  26.  
  27.    ifstream fich (Imagen, ios::in | ios::binary);
  28.  
  29.    com=(fich.good());
  30.  
  31.    cout <<  endl;
  32.  
  33.  
  34.  
  35.    if (com==0) cout <<  "La imagen no existe";
  36.  
  37.    else cout <<  "La imagen existe";
  38.  
  39.    cin.get();
  40.  
  41. }

 

O con el open de ifstream

 

Un saludo a todos y gracias por vuestra ayuda.


« Última modificación: 23 Junio 2011, 16:50 pm por tonilogar » En línea

No porque discrepe de tu opinión intento ofenderte.

Un saludo a todos y gracias por vuestro tiempo.
Don Pollo

Desconectado Desconectado

Mensajes: 74

/* No comments */


Ver Perfil
Re: comprobar si el fichero existe, variable tipo string
« Respuesta #1 en: 14 Junio 2011, 23:31 pm »

No creo que haya forma de saber si el fichero se ha abierto bien con una variable string pero, tengo una duda de tu código: por qué pones endl's antes y después del cin? si lo que este comando haga no lo muestra por pantalla


En línea

fantasma306

Desconectado Desconectado

Mensajes: 28



Ver Perfil
Re: comprobar si el fichero existe, variable tipo string
« Respuesta #2 en: 15 Junio 2011, 11:33 am »

Si tu archivo es binario, ya no se trata de ifstream ni de ofstream. solo tienes que poner fstream:
   fstream fich (Imagen, ios::in | ios::binary);

Lo que puedes hacer es intentar abrir el archivo en lectura, y despues comprobar si esta abierto. (si no esta abierto no existe y si esta abierto no te olvides de cerrarlo)

Código
  1. string nomImagen;
  2. cout <<  "\n\nselecciona imagen a transformar\n\n";
  3.  
  4. cin.clear();
  5. cin.sync();
  6. getline(cin,nomImagen);
  7.  
  8. cout<<nomImagen<<endl;
  9.  
  10. fstream archivo(nomImagen.c_str() , ios_base::in | ios_base::binary);
  11. if(archivo.is_open()){
  12. cout<<"El archivo existe"<<endl;
  13. archivo.close();
  14. }
  15. else
  16. cout<<"El archivo no se ha abierto";//podriamos decir que no existe
  17.  

si el codigo es solo para windows hecha un vistazo a esto:
http://www.latindevelopers.com/forum/verificar-si-un-archivo-existe-t3102.html

saludos
En línea

Es mejor callar y que piensen que eres idiota a hablar y demostrarlo.
Died

Desconectado Desconectado

Mensajes: 32


Ver Perfil
Re: comprobar si el fichero existe, variable tipo string
« Respuesta #3 en: 15 Junio 2011, 17:06 pm »

Código
  1. #include <stdio.h>
  2.  
  3. int main (int argc, char *argv [])
  4. {
  5. printf ("Looker2Files 0.1 : Sagrini11: elhacker.NET\n");
  6. if (argc != 2)
  7. {
  8. printf ("Use: %s <file2look>\n\n", argv [0]);
  9. return 1;
  10. }
  11.  
  12. int fd;
  13. if ((fd = fopen (argv [1], "r"))!=-1)
  14. {
  15. printf ("File %s is here\n\n", argv [1]);
  16. return 0;
  17. }
  18. printf ("File %s is not here\n\n", argv [1]);
  19. return 1;
  20. }
  21.  
  22.  

Esperemos que lo entiendas :)
Un saludo. Sagrini
En línea

tonilogar

Desconectado Desconectado

Mensajes: 55


Ver Perfil
Re: comprobar si el fichero existe, variable tipo string
« Respuesta #4 en: 16 Junio 2011, 00:45 am »

El  cout <<  endl; detras del cin es porque despues se imprime la variable Imagen y lo veo mas claro.
Pero bueno como comentas en el código final no sirve para nada.

En principio lo he solucionado con el fstream
Código
  1. void ImagenEntrada()
  2. {
  3. std::cin.ignore();
  4.  
  5. //VARIABLES DE FUNCION/////////////////////////////////////////////////////////////////////////
  6. std::string Imagen;
  7.  
  8.  
  9. do
  10. {
  11. cout << "entra datos";
  12. cout << endl<< endl;
  13.  
  14. getline (cin,Imagen);
  15. const char *ImagenChar=Imagen.c_str();
  16. fstream fichero(ImagenChar, ifstream::in);
  17.    if (!fichero)
  18.    {
  19.       cout << "L'imatge a transformar no es correcta" << endl;
  20.  
  21.    }
  22.   /* else if(fichero<1)
  23.     {
  24.        cout << "Fin entrada de Imagenes" << endl;
  25.     }*/
  26.    else
  27.    {
  28.      cout << "OK" << endl;
  29.    }
  30.  
  31. }
  32. while (Imagen.length()!=0);
  33. cout << endl<< endl;
  34. }
  35.  
Fantasma306 probare como me indicas, para ver que solución es la que mas me conviene.
En principio es para windows, pero en casa utilizo linux y prefiero que el código sea portable.


Pues como de primeras no entiendo mucho Died, pero me lo mirare con detenimiento (soy un novato).

Si veis alguna pega sobre la solución que he utilizado no dejéis de criticar todo lo criticable.

Un saludo y gracias por vuestro tiempo.






En línea

No porque discrepe de tu opinión intento ofenderte.

Un saludo a todos y gracias por vuestro tiempo.
fantasma306

Desconectado Desconectado

Mensajes: 28



Ver Perfil
Re: comprobar si el fichero existe, variable tipo string
« Respuesta #5 en: 16 Junio 2011, 13:26 pm »

bueno solo decirte que no hace falta que pongas
Código:
std::
ya que creo que tienes puesto el using namespace std;

tampoco hace falta que hagas esto:
Código:
const char *ImagenChar=Imagen.c_str();
con que pongas,
Código:
fstream fichero(Imagen.c_str(), ifstream::in);
ya esta, asi te ahorras variables. (es una de mis manias!  ;D)

una ultima cosa, no te olvides de cerrar el archivo en el ELSE  ;)

saludos!


En línea

Es mejor callar y que piensen que eres idiota a hablar y demostrarlo.
tonilogar

Desconectado Desconectado

Mensajes: 55


Ver Perfil
Re: comprobar si el fichero existe, variable tipo string
« Respuesta #6 en: 16 Junio 2011, 23:59 pm »

Gracias por tu ayuda fantasma306, este fin de semana intentare limpiar el código.
En línea

No porque discrepe de tu opinión intento ofenderte.

Un saludo a todos y gracias por vuestro tiempo.
tonilogar

Desconectado Desconectado

Mensajes: 55


Ver Perfil
Re: comprobar si el fichero existe, variable tipo string
« Respuesta #7 en: 23 Junio 2011, 16:48 pm »

Gracias por tu ayuda fantasma306.

Al  final he seguido todas tus indicaciones, utilizando el open y sin crear una variable nueva.
Así queda el código:


Código
  1.  
  2. void ImagenEntrada()
  3. {
  4. cin.ignore();
  5.  
  6. //VARIABLES DE FUNCION/////////////////////////////////////////////////////////////////////////
  7. string Imagen;
  8.  
  9.  
  10. do
  11. {
  12. cout << "entra datos";
  13. cout << endl<< endl;
  14.  
  15. getline (cin,Imagen);
  16. fstream fichero(Imagen.c_str(), ios_base::in | ios_base::binary);
  17.    if (fichero.is_open())
  18.    {
  19.       cout << "el fichero existe" << endl;
  20.       fichero.close();
  21.  
  22.    }
  23.   else if (Imagen.length()==0)
  24.   {
  25.      cout << "OK" << endl;
  26.    }
  27.  
  28.    else
  29.    {
  30.      cout << "El fichero no existe" << endl;
  31.    }
  32.  
  33. }
  34. while (Imagen.length()!=0);
  35. cout << endl<< endl;
  36. }
  37.  

Un saludo.
En línea

No porque discrepe de tu opinión intento ofenderte.

Un saludo a todos y gracias por vuestro tiempo.
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines