Prolem: Verzeichnis öffnen



  • Ich erstelle zur Zeit ein Programm das in ein Verzeichnis geht und es durchsucht. Ich bin auch schon an meheren orten fündig geworden wie ich das bewerkstelligen muss nur bleibt das Programm aus mir unerklärlichen Gründen stehen.

    Headerdatei: cuploader.h

    #ifndef CUPLOADER_H
    #define CUPLOADER_H
    
    #include <stdio.h>
    #include <errno.h>
    #include <sys/types.h>
    #include <sys/stat.h>
    #include <dirent.h>
    #include <unistd.h>
    #include "mydb.h"
    #include "resultset.h"
    
    using namespace std;
    
    class Cuploader
    {
    public:
    	bool searchDirectory(string sDirectory, CMyDB db);
    
    #endif
    

    cuploader.cpp
    {code]
    #include "cuploader.h"

    bool Cuploader::searchDirectory(string sDirectory, CMyDB db)
    {

    DIR* folder;
    struct dirent *curFile;

    if ((folder = opendir(sDirectory.c_str())) == NULL)
    {
    perror("opendir()");
    return EXIT_FAILURE;
    }
    }
    [/code]

    Aus irgendeinem unerklärlichen Grund bleibt das Programm bei der Zeile "if ((folder...." einfach stehen ausser wenn ich in sDirectory einen nicht existierenden Pfad drin habe.
    Wenn ich Debugge steht beim Pointer folder "incomplete type", heisst dass das es mir aus irgendeinem Grund die header-Datei dirent.h verschossen hat? Dort ist doch der Typ DIR definiert.

    Würde mich sehr freuen über Antworten, ich denke das ist genug Code, kann aber auch noch mehr posten wenn der Fehler ganz an einem anderen Ort liegen kann.



  • Morgen,

    dafuer bist du hier im falschen Forum, haettest unter Linux/Unix posten muessen,
    da es kein C++-Problem ist.

    Nun aber zum Problem:

    Wie sieht beispielsweise sDirectory aus? Der Code sieht ok aus. Und stehenbleiben
    duerfte er eigentlich nicht, er muesste eigentlich weiterlaufen.

    mfg
    v R



  • srry wegen dem falschen Forum.

    sDirectory ist ein string der in etwa folgenden Inhalt hat "/srv/www/htdocs/events/cam1"

    Das ist ein existirender Ordner. Wie schon gesagt wenn ich testweise ein nicht existierender Ordner übergebe geht es weiter und gibt eine Fehlermeldung aus. Aber wenn er existiert bleibt es einfach stehen. Ich denke das liegt daran da er bei einem nicht existierenden Ordner gar nicht erst versucht diesen "incomplete type" abzufüllen.



  • Mach mal ein 'struct' vor den Typ 'DIR'. Das sollte beim C++-Kompiler zwar
    egal sein, aber versuch das mal.

    mfg
    v R



  • und was muss dort alles rein?



  • oder meinst du:

    #include "cuploader.h" 
    
    bool Cuploader::searchDirectory(string sDirectory, CMyDB db) 
    { 
    
    struct DIR* folder; 
    struct dirent *curFile;
    

    falls ja, das funzt nicht:

    cuploader.cpp:103: Warnung: ISO C++ forbids declaration of folder' with no type cuploader.cpp:120: error: cannot convert \DIR*' to `int*' in assignment
    cuploader.cpp:136: error: cannot convert `int*' to `DIR*' for argument `1' to `
    dirent* readdir(DIR*)'
    cuploader.cpp:170: error: cannot convert `int*' to `DIR*' for argument `1' to `
    int closedir(DIR*)'



  • aus

    folder = opendir(sDirectory.c_str())) == NULL

    würd ich:

    (folder = opendir(sDirectory.c_str()))) == NULL

    machen



  • -Foo- schrieb:

    aus

    folder = opendir(sDirectory.c_str())) == NULL

    würd ich:

    (folder = opendir(sDirectory.c_str()))) == NULL

    machen

    Und was würde mir das bringen? Dann hätte ich ja ein )-Zeichen ziviel?
    Ich glaube so wies jetzt ist stimmt das.



  • Karimkaze schrieb:

    oder meinst du:

    #include "cuploader.h" 
    
    bool Cuploader::searchDirectory(string sDirectory, CMyDB db) 
    { 
    
    struct DIR* folder; 
    struct dirent *curFile;
    

    falls ja, das funzt nicht:

    cuploader.cpp:103: Warnung: ISO C++ forbids declaration of folder' with no type cuploader.cpp:120: error: cannot convert \DIR*' to `int*' in assignment
    cuploader.cpp:136: error: cannot convert `int*' to `DIR*' for argument `1' to `
    dirent* readdir(DIR*)'
    cuploader.cpp:170: error: cannot convert `int*' to `DIR*' for argument `1' to `
    int closedir(DIR*)'

    Ja, das hatte ich gemeint. Sehr merkwuerdig, dass er DIR bei dir nicht kennt.

    Du solltest uebrigens den Namensraum nicht in der Headerdatei oeffnen. Includier
    doch mal die Header, welche nur in der Source-Datei von noeten sind, auch nur
    in eben dieser.

    mfg
    v R



  • -Foo- schrieb:

    aus

    folder = opendir(sDirectory.c_str())) == NULL

    würd ich:

    (folder = opendir(sDirectory.c_str()))) == NULL

    machen

    Das ist schon richtig, wie er es gemacht hat. Schau dir seinen Code nochmal
    genau an.

    mfg
    v R


Log in to reply