Dev - C++ - [C++] Borrar archivo

   
Vista:
Imágen de perfil de Tomás

[C++] Borrar archivo

Publicado por Tomás (15 intervenciones) el 17/05/2015 13:14:34
Buenas,

Tengo un problema al borrar un archivo con la función "remove()", a pesar de no darme ningún error no hace su función de borrar dicho archivo.

Aquí la línea de la función:

1
2
3
else if(hacerOpcion == "borrar"){
        	    remove("archivos/juan.txt");
        }

Librerías que uso:

1
2
3
4
#include <iostream>
#include <fstream>
#include <string>
#include <stdio.h>

Código completo donde se aloja la función "remove()":

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
string str;
	string buscarNombre;
	string hacerOpcion;
	string nombreDos;
	string empresaDos;
	string edadDos;
 
	cout << "Introduce el nombre a buscar: ";
	cin >> buscarNombre;
 
	const char *datname; // No podemos modificar el valor
 
	buscarNombre = "archivos/" + buscarNombre + ".txt"; // Asignamos un valor a la variable
 
	datname = buscarNombre.c_str(); // c_str devuelve un const char*
 
	ifstream fe(datname);
 
	if(fe.good()){
		// Se muestra el contenido
		while(!fe.eof())
        {
            char c = fe.get();
            str += c;
 
		    if(c == '\n') {
                cout << str;
                str = "";
            }
        }
 
        cout << "\nQue desea hacer?" << endl;
        cin >> hacerOpcion;
 
        if(hacerOpcion == "modificar"){
        	cout << "Modificando archivo..." << endl;
 
        	ofstream fe(datname);
 
        	getline(cin, nombreDos);
        	cout << "Nombre: ";
	        getline(cin, nombreDos);
 
        	cout << "Empresa: ";
	        getline(cin, empresaDos);
 
	        cout << "Edad: ";
	        cin >> edadDos;
 
	        nombreDos = "Nombre: " + nombreDos;
	        empresaDos = "Empresa: " + empresaDos;
	        edadDos = "Edad: " + edadDos;
 
	        cin.ignore(2, '\n');
 
	        fe.write(nombreDos.c_str(), nombreDos.size());
	        fe << endl;
	        fe << endl;
	        fe.write(empresaDos.c_str(), empresaDos.size());
	        fe << endl;
	        fe << endl;
	        fe << edadDos << endl;
 
	        fe.close();
        }
        else if(hacerOpcion == "borrar"){
        	    remove("archivos/juan.txt");
        }
	    else{
		    cout << "Opcion no valida." << endl;
	    }
    }

No me salta ningún error, pero el archivo no se borra.
Si pudieran echarme una ayudita lo agradecería.

Saludos.
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
Imágen de perfil de vangodp

[C++] Borrar archivo

Publicado por vangodp (287 intervenciones) el 17/05/2015 16:44:33
Es por que te da una denegación de permiso, por tenerlo abierto anteriormente y no cerrarlo antes de remover. Si usaras control de excepciones (errno) tendrías pistas.
Es como cuando tienes un archivo abierto con el notepad y intentas borrarlo sin haber cerrado el notepad, windows de da un aviso.

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
#include <iostream>
#include <fstream>
#include <cstdio>
#include <cstring>
#include <errno.h>
using namespace std;
 
 
int main() {
    string str;
    string buscarNombre;
    string hacerOpcion;
    string nombreDos;
    string empresaDos;
    string edadDos;
 
    cout << "Introduce el nombre a buscar: ";
    cin >> buscarNombre;
    cin.sync();
 
    const char *datname; // No podemos modificar el valor
    buscarNombre = "archivos/" + buscarNombre + ".txt"; // Asignamos un valor a la variable
    datname = buscarNombre.c_str(); // c_str devuelve un const char*
    ifstream fe ( datname );
 
    if ( fe.good() ) {
        // Se muestra el contenido
        while ( !fe.eof() ){
            char c = fe.get();
            str += c;
            if ( c == '\n' ) {
                cout << str;
                str = "";
            }
        }
        cout << "\nQue desea hacer?" << endl;
        cin >> hacerOpcion;
        cin.sync();
 
        if ( hacerOpcion == "modificar" ) {
            cout << "Modificando archivo..." << endl;
            ofstream fe ( datname );
            getline ( cin, nombreDos );
            cout << "Nombre: ";
            getline ( cin, nombreDos );
            cout << "Empresa: ";
            getline ( cin, empresaDos );
            cout << "Edad: ";
            cin >> edadDos;
            nombreDos = "Nombre: " + nombreDos;
            empresaDos = "Empresa: " + empresaDos;
            edadDos = "Edad: " + edadDos;
            cin.ignore ( 2, '\n' );
            fe.write ( nombreDos.c_str(), nombreDos.size() );
            fe << endl;
            fe << endl;
            fe.write ( empresaDos.c_str(), empresaDos.size() );
            fe << endl;
            fe << endl;
            fe << edadDos << endl;
            fe.close();
 
        }else if ( hacerOpcion == "borrar" ) {
            fe.close(); //<-No puedes eliminar un archivo si lo estas editando...Antes debes cerrarlo.
            //Además debes aprender a usar los erros para obtener pista. si tienes el archivo abierto te va decir permiso denegado(en ingles claro XD). Eso es por que el archivo estaba abierto y por eso no puedes borrarlo.
            if( std::remove( buscarNombre.c_str() )!=0 ){
                cout<<"Error al removerlo: "<<strerror(errno)<<endl;
            }else{
                cout<<"Archivo removido"<<endl;
            }
 
        } else {
 
            cout << "Opcion no valida." << endl;
 
        }
 
    }
 
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Tomás

[C++] Borrar archivo

Publicado por Tomás (15 intervenciones) el 17/05/2015 17:52:16
Cierto, es como dices si tienes el notepad++ abierto e intenta cerrar un archivo que estas utilizando te salta una alerta y no te deja borrarlo.

Esta librería:

1
#include <errno.h>

No la he incluido, solo he añadido:

1
fe.close();

Antes del remove(); y funciona correctamente.

Gracias.
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
Imágen de perfil de vangodp

[C++] Borrar archivo

Publicado por vangodp (287 intervenciones) el 17/05/2015 18:28:10
esa librería es para usar excepciones. No eres obligado a usarla, al igual que ninguna otra(puedes ir a dormir por ejemplo XD), pero te hace la vida más fácil.

te puede prevenir cosas como por ejemplo si añades una ruta que no existe te retorna "no such file or directory" o esa que describí antes que te dice que no tienes permiso "Access is denied". Y muchos otras....

Esa no es la forma de control de excepciones de C++ si no de C. En c++ están try, catch, throw: http://es.wikibooks.org/wiki/Programaci%C3%B3n_en_C%2B%2B/Excepciones
y http://c.conclase.net/curso/?cap=043 para más info.

Usarlo o no es cosa tuya. Bay
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