Portierung nach Linux _finddata_t, _findfirst, -findnext, _findclose



  • Hallo,
    ich bin gerade dabei eine Bibliothek von Windows nach Linux zu portieren.
    Jetzt suche ich nach einen Äquivalent für das struct _finddata_t und die Funktionen _findfirst, -findnext, _findclose.
    Vielleicht kann mir jemand dabei helfen. Ich habe eine Funktion welche diese Funktionen und das struct benutzt die ungefähr so aussieht.

    bool DirSearch()
    {
        char PathNameBase[OS_DEP_MAXPATH+1];
        memset(PathNameBase,0,sizeof(PathNameBase));
        char PathNameCur[OS_DEP_MAXPATH+1];
        memset(PathNameBase,0,sizeof(PathNameCur));
        strncpy(PathNameBase,Dir,sizeof(PathNameBase)-1);
    
        _finddata_t finddata;
        intptr_t hFile;
        if((hFile=_findfirst(PathNameBase, &finddata))==-1L)
            return false;
    
        ChangeFileName(PathNameBase,PathNameCur,finddata.name);
    
        if(finddata.attrib&_A_SUBDIR)
        {
            if(Subdirs&&strcmp(finddata.name,".")!=0&&strcmp(finddata.name,"..")!=0)
            {
                DirSearch(PathNameCur,Subdirs);
            }
        }
        else
        {
            Add(PathNameCur);
        }
    
        while(_findnext(hFile,&finddata)==0)
        {
            ChangeFileName(PathNameBase,PathNameCur,finddata.name);
            if(finddata.attrib&_A_SUBDIR)
            {
                if(Subdirs&&strcmp(finddata.name,".")!=0&&strcmp(finddata.name,"..")!=0)
            {
                DirSearch(PathNameCur,Subdirs);
            }
        }
        {
            else Add(PathNameCur);
        }
    
        _findclose(hFile);
        return true;
    }
    

    Die Funktion ChangeFileName sieht so aus:

    void ChangeFileName(const char* PathNameIn, char* PathNameOut, const char* NewName)
    {
        char drive[_MAX_DRIVE];
        char dir[_MAX_DIR];
        char fname[_MAX_FNAME];
        char ext[_MAX_EXT];
        _splitpath((char*)PathNameIn,drive,dir,fname,ext);
        _makepath((char*)PathNameOut,drive,dir,NULL,NULL);
        if(NewName!=NULL)strcat(PathNameOut, NewName);
    }
    

    Ich bin für jede Hilfe sehr dankbar.

    Viele Grüße,
    esinef



  • Hallo,

    lese z.B. unter dem Abschnitt "Directory Operation" hier:

    http://technet.microsoft.com/en-us/library/bb497011.aspx

    nach.

    MfG,

    Probe-Nutzer



  • Schau Dir mal boost::filesystem an.



  • Danke Probe-Nutzer,
    der Beitrag hat mir seh weitergeholfen.
    Grüße
    esinef


Log in to reply