logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Usuwanie pliku w C++ z błędem Permission denied - jak rozwiązać?

kaCpi_ 11 Sty 2024 18:43 276 2
REKLAMA
  • #1 20903917
    kaCpi_
    Poziom 4  
    Posty: 20
    Piszę prosty menedżer haseł w C++ i mam problem z usuwaniem pliku "Permission denied". Otwierałem Visual Studio jako Administrator i nie pomogło.

    Funkcja która ma usuwać plik:

    void UsunHaslo()
    
    
    {
    
    
        ifstream plik(nhasla_s.c_str()); 
    
        plik.close();
    
    
        if (remove(nhasla_s.c_str()) == 0) {
            cout << "Plik " << nhasla_s << " usunięty.\n";
        }
        else {
            perror("Błąd usuwania pliku");
        }
    }
    



    Tutaj caly kod:


    #include <iostream>
    #include <fstream>
    #include <string>
    #include <cstdio>
    using namespace std;
    
    string nhasla_s;
    
    
    
    void UsunHaslo()
    
    
    {
    
    
        ifstream plik(nhasla_s.c_str()); 
    
        plik.close(); 
    
        if (remove(nhasla_s.c_str()) == 0) {
            cout << "Plik " << nhasla_s << " usunięty.\n";
        }
        else {
            perror("Błąd usuwania pliku");
        }
    }
    
    
    
    struct dane
    {
        string login;
        string haslo;
    };
    
    void NoweHaslo()
    {
        cout << "Nazwa hasla";
    
        char nhasla[15];                               //pobranie nazwy hasła
        cin.getline(nhasla, 15);
       
        for (int i = 0; i < 15; i++)                //zamniana na małe litery
        {
            if (nhasla[i] > 66 && nhasla[i] < 91)
            {
                nhasla[i] = nhasla[i] + 32;
            }
        }
        nhasla_s = nhasla;
        nhasla_s.append(".txt");
        
        
        
        ifstream plik2(nhasla_s.c_str());
    
        if (plik2.good())
        {
            cout << "haslo o nazwie "<<nhasla<<" już isnieje" << endl << "chcesz je usunac i stworzyc nowe" << endl << "1. Tak" << endl << "2.Nie";
    
            int wybor;
            cin >> wybor;
            switch (wybor) {
            case 1:
                UsunHaslo();
                break;
            case 2:
               
                break;
            }
        }
        else 
        {
            ofstream plik(nhasla_s); //jeśli nie istnieje, zostanie utworzony
    
            {
                dane dane;
                cout << "login : "; cin >> dane.login;
                cout << "haslo : "; cin >> dane.haslo;
    
    
                fstream plik;
                plik.open(nhasla_s, ios::out | ios::app);
    
    
                if (!plik.is_open())
                {
                    cerr << "Blad podczas otwierania pliku" << endl;
    
                }
    
                plik << dane.login << " " << dane.haslo;
                cout << "hasło zapisane";
                return;
                
            }
        }
    }
    
    
    
    
    
    
    
    
    
    
    
    
    int main()
    {
        cout<<"Wybierz funkcje:" << endl << "1.Wyswietl haslo " <<endl<< "2.Nowe haslo" <<endl << "3.Usun haslo" <<endl;
    
        while (true)
        {
            int wybor;
            cin >> wybor;
            cin.ignore();
            switch (wybor)
            {
            case 1:
                
                break;
            case 2:
                system("cls");
                NoweHaslo(); 
                break;
            case3:
                system("cls");
                UsunHaslo(); 
                break;
            case 4:
                exit(0);
                break;
            }
    
        }
        
           return 0;
    }
    
    
  • REKLAMA
  • #2 20904232
    jarekgol
    Poziom 40  
    Posty: 5181
    Pomógł: 645
    Ocena: 1150
    Spróbuj wpisać nazwę z palca "nazwa.txt" i zobacz co będzie.
    Sprawdź czy problem jest z otwieraniem czy z kasowaniem.
    Może przykład stąd coś pomoże:
    https://cplusplus.com/reference/fstream/ifstream/ifstream/
    Odpal samo exe? jako administrator bezpośrednio z dysku, nie przez VS.
    Daj znać jaki system, chociaż po administratorze zakładam że windows.
    Czy plik idzie skasować ręcznie z eksploratora?
    Rzuć okiem tu https://en.cppreference.com/w/cpp/io/c/remove jest napisane że Windows nie pozawala usunąć pliku, jeśli coś go używa.
    Zajrzyj do dziennika zdarzeń, może znajdziesz jakieś podpowiedzi.
  • #3 20904527
    kaCpi_
    Poziom 4  
    Posty: 20
    Nie zamykałem pliku przed usuwaniem. Dzięki za pomoc.
REKLAMA