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