Ergebnis 1 bis 6 von 6
  1. #1
    Neuling
    Registriert seit
    15.11.2015
    Beiträge
    4

    Standard C++ Filesystem prüfen ob System Datei ist

    Moin Moin ihr Lieben.

    ich programmier zurzeit einen Kleinen daten Manager. Ich verwende ausschließlich die Filesystem library
    Mit einem Pfad soll geprüft werden, ob es ein Ordner oder eine Datei ist. Dieses funktioniert solange es keine Systemdateien im Ordner gibts.
    hier ist mein Ausschnitt vom Code.



    Code:
    std::string DIR_INFO::File_Status()
    {
        
        std::string File_Status;
        try
        {
           
    
            if (std::filesystem::is_regular_file(cur_path()))
            {
                File_Status = "FILE";
                return File_Status;
            }
            if (std::filesystem::is_directory(cur_path()))
            {
                File_Status = "Ordner";
                return File_Status;
            }
        }
        catch (std::filesystem::filesystem_error e)
        {
            std::cout << "\n";
            std::cout << "Fehler: " << e.what() << std::endl;
        }
    
    }
    Meine Frage ist:
    Gibt es eine Möglichkeiten zur Abfrage von System Dateien?

    Danke für die Hilfe

  2. #2
    Sobig Wurm
    Registriert seit
    03.07.2015
    Beiträge
    201

    Standard AW: C++ Filesystem prüfen ob System Datei ist

    Moin,
    gib mal bitte den Fehler, den du da ausgibst. Wahrscheinlich liegts an den Rechten. Unter Windows mal als Admin und unter Linux mal als root ausführen ums auszutesten (Aber natürlich nur, wenn dein restlicher Code keine Dateien manipuliert und sie nur anschaut!)

  3. #3
    Neuling
    Registriert seit
    15.11.2015
    Beiträge
    4

    Standard AW: C++ Filesystem prüfen ob System Datei ist

    Der Fehler lautet wie folgt:

    Code:
    Der Prozess kann nicht auf die Datei zugreifen, da sie von einem anderen Prozess verwendet wird.:
    Eigentlich greif ich auf dei datein in den vorherigen Code nicht zu.

    Ich poste mal morgen den restlichen Code wenn es notwendig ist.

    Danke für die Hilfe

  4. #4
    Sobig Wurm
    Registriert seit
    03.07.2015
    Beiträge
    201

    Standard AW: C++ Filesystem prüfen ob System Datei ist

    Hm, ja, und du bist dir sicher, dass diese Exception von diesem Ausschnitt kommt? Ich weiß nämlich nicht genau, ob is_regular_file so ne exception wirft. Hab leider kein Windows System gerade zum testen, aber du kannst ja mal einfach nur eine Zeile (ohne den restlichen Code) mit einer bestimmten Datei ausprobieren. Wenn das dann immer noch so ist, muss man wohl ne Alternative finden, die die Datei nicht öffnet. Vielleicht könntest du bspw jeden "Ordner" einmal öffnen und gucken ob was drin ist und wenn du ne Exception kriegst, weißt du dass es kein Ordner, sondern ne reguläre Datei ist. Keine Ahnung, ob das funktioniert, aber denke schon.

  5. #5
    Neuling
    Registriert seit
    15.11.2015
    Beiträge
    4

    Standard AW: C++ Filesystem prüfen ob System Datei ist

    Moin Moin. Ja der fehler entsteht durch die Funktion File_Status().

    Hier ist mein restlicher Code. Vllt siehst du irgendwo einen Fehler.

    Hauptklasse:
    Code:
    #include <filesystem>
    
    class DIR_INFO
    {
    public:
    
        std::filesystem::path m_path;
        std::vector<std::string> File_Status_v;
    
        DIR_INFO(std::filesystem::path const& path);
    
        std::filesystem::path cur_path();
        
    
        void MENU();
        std::string filename();
        
        std::string File_Status();
        std::uintmax_t File_Size();
        std::string Show_Perms();
        std::string Show_Perms2();
    
    private:
    
    };
    Klasse welche die Eingeschaften von der Klasse DIR:INFO erbt

    Code:
    #include "DIR_INFO.h"
    
    class DIR_DATA : public DIR_INFO
    {
    
    private:
    
    public:
        DIR_DATA(std::filesystem::path const& path);
    
        std::vector<DIR_INFO> files();
    };
    Main CCP
    Code:
    #include "DIR_INFO.h"
    #include "DIR_DATA.h"
    #include <iostream>
    
    
    int
    main(int argc, char** argv)
    {
        DIR_DATA dir{ "C:\\" };
    
        dir.MENU();
        
        
        
        for (auto& file : dir.files())
        {
            
            std::cout << std::setw(5) << dir.cur_path()
                << std::setw(50) << file.filename() //<< std::endl;
                << std::setw(15) << file.File_Status()// << std::endl;
                << std::setw(15) << file.File_Size() //<< std::endl;
                << std::setw(15) << file.Show_Perms() << std::endl;
                
        }
        
        
    }
    Funktionen
    Code:
    #include "DIR_INFO.h"
    #include "DIR_DATA.h"
    
    #include <iostream>
    
    DIR_INFO::DIR_INFO(std::filesystem::path const& path)
    {
        m_path = path;
    }
    
    
    std::filesystem::path DIR_INFO::cur_path()
    {
        return m_path;
    }
    
    
    std::vector<DIR_INFO> DIR_DATA::files()
    {
        std::vector<DIR_INFO> files;
        try
        {
    
            for (auto const& entry : std::filesystem::directory_iterator( cur_path(), std::filesystem::directory_options::skip_permission_denied  ))
            {
    
                files.push_back(entry.path());
    
            }
    
            return files;
        }
        catch (std::filesystem::filesystem_error e)
        {
            std::cout << "\n";
            std::cout << "Fehler: " << e.what() << std::endl;
        }
    }
    
    
    std::string DIR_INFO::filename()
    {
        
        return cur_path().filename().string();
    }
    
    
    void DIR_INFO::MENU()
    {
        std::cout << std::setw(5) << "Search_Manager_V0.60" << std::endl;
        std::cout << std::setw(5) << "Pfad " << 
            std::setw(61) << "Inhalt" <<
            std::setw(15) << "STATUS" <<
            std::setw(15) << "Size in Kb" <<
            std::setw(15)<<"Rechte"<<std::endl;
    
    }
    Ich schau mal ob ich eine Lösung finde.

  6. #6
    Tron Avatar von gORDon_vdLg
    Registriert seit
    23.07.2007
    Beiträge
    801

    Standard AW: C++ Filesystem prüfen ob System Datei ist

    Ich hatte vor einigen Monaten ein ähnliches Problem. Ein "FileExists" (Delphi Libraryfunktion) schlägt fehl bei Systemdateien. Intern wird die Winapi "FindFirstFile" genutzt, mit dieser bekommt man auch die Dateiattribute heraus und somit auch ob es eine Datei oder ein Ordner ist. Ist also nicht unwahrscheinlich dass die C++ Funktion auch auf dieser API basiert. Bei mir war es die Lösung den Check einfach wegzulassen und tatsächlich auf die Datei zuzugreifen (in dem Fall LoadLibraryEx mit den Flags "LOAD_LIBRARY_AS_IMAGE_RESOURCE OR LOAD_LIBRARY_AS_DATAFILE" um Icons aus Dlls auszulesen und drauf zu reagieren ob das fehlschlägt oder nicht.
    Du könntest ja sicher leicht prüfen ob die C++ Funktion auch auf FindFirstFile basiert und testweise mal gucken ob z.B. CreateFile mit Leserechten oder andere Winapis funktionieren. Ich hatte diverse Sachen ausprobiert bevor ich den Check entfernt habe, aber ich weiß echt nicht mehr was ich alles getestet habe.

Ähnliche Themen

  1. Antworten: 4
    Letzter Beitrag: 11.09.2010, 22:49
  2. FileSystem Script (Datei Browser)
    Von Nimos im Forum PHP
    Antworten: 10
    Letzter Beitrag: 07.08.2008, 03:59
  3. Linux Remote Filesystem unter Win einbinden
    Von praet0rian im Forum Linux und UNIX-Systeme
    Antworten: 2
    Letzter Beitrag: 16.06.2007, 00:51

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •