Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: kerkox en 5 Marzo 2014, 06:01 am



Título: modificacion de archivo y verificacion de existencia no cierra??? ayuda!!!
Publicado por: kerkox en 5 Marzo 2014, 06:01 am
Hola que tal amigos, lo que sucede es que estoy haciendo un programa que modifica un archivo pero para poder modificarlo primero verifico que exista con el nombre que se va a modificar para no repetir
ejemplo:
*******************************************************
archivo original:                                    fichero.exe

archivo modificado o renombrado:         fichero2.exe

si existe   fichero2.exe   entonces Mostrar mensaje no se puede modificar ya que esta modificado

SINO entonces modificar o renombre por fichero2.exe
********************************************************

y luego hay otra opcion
que dice si desea reestablecerlo
*******************************************************
PARA RESTABLECER CON PREVIA MODIFICAION
archivo original:                                    fichero2.exe

archivo modificado o renombrado:        fichero.exe

si existe   fichero2.exe   entonces modificar o renombre por fichero.exe

SINO entonces  Mostrar mensaje no se puede modificar ya que NO SE HA MODIFICADO
******************************************************

EL PROBLEMA: cuando se realiza una de las opciones primero funciona, pero cuando regresa al menu para selecionar otra opcion no funciona porque muestra el mensaje de error de cada funcion

pero cuando cierro el programa y vuelvo a abrirlo funciona perfectamente la primera vez de ahi en adelante no funciona para nada

una de las funciones que utilizo para verificar si existe es la siguiente:

Código:
#include <fstream>
#include <iostream>

 bool file_exists(const char * f){
    ifstream file;
    file.open(f);
    if(file.fail())
        return false;
    file.close();
    return true;
}
int main()
{
bool j;

bool j= file_exist("c:\\fichero2.exe");

if (j)
{
cout << "No se puede renombrar ya que esta renombreado" << endl;
}
else {
// se ejecuta los comandos de renombre
}

}

##############
Por ahora una solucion burda que he hecho es llamar a un archivo externo en bat para que me cierre el program y lo vuelva a abrir para la solucion pero si alguien me puede dar alguna idea se lo agradezco mucho

P.D si necesitan mas datos solo comenten


Título: Re: modificacion de archivo y verificacion de existencia no cierra??? ayuda!!!
Publicado por: engel lex en 5 Marzo 2014, 06:17 am
dices "cuando regresa al menú" pero no veo ningún retorno al menú ni ciclos...
solo veo que lo abres y debe correr linealmente, terminar y cerrarse

puedes usar las etiquetas GeSHi para que el codigo sea más legible
Código
  1. #include <fstream>
  2. #include <iostream>
  3.  
  4. bool file_exists(const char * f){
  5.    ifstream file;
  6.    file.open(f);
  7.    if(file.fail())
  8.        return false;
  9.    file.close();
  10.    return true;
  11. }
  12. int main()
  13. {
  14. bool j;
  15.  
  16. bool j= file_exist("c:\\fichero2.exe");
  17.  
  18. if (j)
  19. {
  20. cout << "No se puede renombrar ya que esta renombreado" << endl;
  21. }
  22. else {
  23. // se ejecuta los comandos de renombre
  24. }
  25.  
  26. }


Título: Re: modificacion de archivo y verificacion de existencia no cierra??? ayuda!!!
Publicado por: BlackM4ster en 5 Marzo 2014, 08:49 am
Código
  1. #include <fstream>
  2. #include <iostream>
  3.  
  4. using namespace std;
  5. bool file_exists(const char * f);
  6.  
  7. int main(){
  8.  
  9. if (file_exists("C:\\fichero2.exe")){
  10. cout << "El archivo existe" << endl;
  11. } else {
  12. cout << "El archivo NO existe" << endl;
  13. }
  14.  
  15. return 0;
  16. }
  17.  
  18. bool file_exists(const char * f){
  19.   fstream file(f);
  20.   return file.good();
  21. }

Aquí tienes tu código funcionando, tienes muchos fallos, revísalos

Editado: Añadida función más sencilla de Amchacon


Título: Re: modificacion de archivo y verificacion de existencia no cierra??? ayuda!!!
Publicado por: amchacon en 5 Marzo 2014, 13:35 pm
Código
  1. bool file_exists(const char * f){
  2.   fstream file;
  3.   file.open(f);
  4.   if(file.fail())
  5.       return false;
  6.   file.close();
  7.   return true;
  8. }

Esta función se puede resumir a:

Código
  1. bool file_exists(const char * f){
  2.   fstream file(f);
  3.   return file;
  4. }

O si te resulta más claro:

Código
  1. bool file_exists(const char * f){
  2.   fstream file(f);
  3.   return file.good();
  4. }