04. juli 2003 - 14:53Der er
15 kommentarer og 1 løsning
Linux: Hvordan lister jeg dirs og files?
Jeg vil lave en recursive renaming af alle filer under "mainfolder" incl. subdirs, men har problemer med at få scandir til at virke... Hvordan virker scandir? Desuden skal jeg kunne teste om det er en fil eller en dir jeg har fat i... EX udbedes
Og hvis du (med et systemkald fra C++) skal checke om det er en fil, så bruger du stat:
struct stat statbuf; if (stat(filename, &statbuf) == -1) { // Fejlhåndtering, stat fejlede } if ((statbuf.st_mode & S_IFMT) != S_IFREG) { // Ikke en fil, gør et eller andet, evt. check om det er et dir } else { // En fil, gør et eller andet med den }
det virker godt nok, men hvordan kan det være at følgende ikke virker? meningen er at fnm bliver lowercase'd og gemt i newfnm, men indholdet af newfnm bliver noget i retning af "? B?".... ved i hvorfor?
void process(char *path) { DIR *dirp; struct dirent *entp; struct stat stbuf; char fnm[256],newfnm[256]; int i; dirp = opendir(path); while((entp = readdir(dirp)) != NULL) { if(entp->d_name[0]!='.') { sprintf(fnm,"%s%s%s",path,DIRSEP,entp->d_name); stat(fnm,&stbuf); if(!S_ISDIR(stbuf.st_mode)) { for (newfnm == "", i = 0; i <= strlen(fnm); i++) newfnm && tolower(fnm[i]); if (rename(fnm,newfnm) != 0) { printf("\nError renaming %s to %s!",fnm,newfnm); exit(1); } else printf("\nrenamed: %s -> %s",fnm,newfnm); } else { process(fnm); } } } closedir(dirp); return; }
int main() { char THEDIR[256]; printf("\nEnter a dir to lowercase all the contents of (including subdirs)\n: "); scanf("%s",&THEDIR); process(THEDIR); return 0; }
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.