norderzon 0 Denunciar post Postado Dezembro 3, 2008 oi tou com um problema, preciso listar o conteudo de uma directoria, o conteudo dessa directoria tem vários ficheiros e subdirectorias eu consigo listar sem problema o conteudo da directoria, mas agora preciso listar o conteudo de algumas subdirectorias especificas da primeira. Não tou a conseguir fazer O meu codigo é qualquer coisa como isto DIR* directorio; DIR* sub_dir; struct dirent* item_directorio; struct dirent* sub_item; directorio = opendir("/home/user/Desktop/directoria"); if(!directorio) { perror("opendir"); return(-1); } item_directorio = readdir(directorio); while(item_directorio) { printf("\n#-------------------------------"); printf("\nPID: %s",item_directorio->d_name); item_directorio = readdir(directorio); /* esta parte é para listar o conteudo das subdirectorias */ sub_dir = opendir(item_directorio->d_name); if(!sub_dir) { printf("\nError\n"); } else { sub_item = readdir(sub_dir); while(sub_item) { printf("\nSub item: %s",sub_item->d_name); } } } closedir(directorio); o resultado com a parte das subdirectorias não dá erro mas o resultado não é o pretendido agradeço qq ajuda obrigado Compartilhar este post Link para o post Compartilhar em outros sites
_Isis_ 202 Denunciar post Postado Dezembro 4, 2008 Se você tá num sistema que suporta o POSIX.1-2001, procure por ftw Compartilhar este post Link para o post Compartilhar em outros sites
norderzon 0 Denunciar post Postado Dezembro 4, 2008 oi, obrigado pela resposta fiz uma pesquisa dessa função e não encontrei nenhum exemplo que conseguisse perceber bem e adaptar para o meu codigo é possivel me dar um exemplo de aplicação dessa função? desculpa a ignorancia como eu descubro se suporta o POSIX.1-2001 Obrigadao Compartilhar este post Link para o post Compartilhar em outros sites
_Isis_ 202 Denunciar post Postado Dezembro 4, 2008 int adicionaNome(const char *fpath, const struct stat *sb, int tflag) { if (S_ISREG(sb->st_mode)) { lista = (char**) realloc(lista,sizeof(char*)*(arquivosExistentes+1)); lista[arquivosExistentes] = (char*)malloc((strlen(fpath)+1)*sizeof(char)); strcpy(lista[arquivosExistentes],fpath); arquivosExistentes++; } return 0; } // Criar lista dos arquivos. lista = (char**)malloc(0); ftw(argv[argc-1], &adicionaNome,20); Linux com certeza tem. Compartilhar este post Link para o post Compartilhar em outros sites