Listar arquivos e pastas em ordem alfabética - primeiro pastas depois arquivos [RESOLVIDO]

1. Listar arquivos e pastas em ordem alfabética - primeiro pastas depois arquivos [RESOLVIDO]

Eduardo Coutinho Scalabrin
cafaia

(usa Gentoo)

Enviado em 22/10/2018 - 18:25h

Olá a todos!

Eu tenho o programa uShare instalado em meu Gentoo, sendo que ao acessar ele de meu BlurayPlay eu vejo arquivos e pastas tudo junto, ou seja, há somente uma classificação por nome e eu gostaria que além da ordem alfabética também houvesse a listagem das pastas primeiro e depois os arquivos.
Segue o trecho que devo modificar, mas não estou sabendo como:

{
struct dirent **namelist;
int n,i;

if (!entry || !container)
return;

n = scandir (container, &namelist, 0, alphasort);
if (n < 0)
{
perror ("scandir");
return;
}

for (i = 0; i < n; i++)
{
struct stat st;
char *fullpath = NULL;

if (namelist[i]->d_name[0] == '.')
{
free (namelist[i]);
continue;
}

fullpath = (char *)
malloc (strlen (container) + strlen (namelist[i]->d_name) + 2);
sprintf (fullpath, "%s/%s", container, namelist[i]->d_name);

log_verbose ("%s\n", fullpath);

if (stat (fullpath, &st) < 0)
{
free (namelist[i]);
free (fullpath);
continue;
}

if (S_ISDIR (st.st_mode))
{
struct upnp_entry_t *child = NULL;

child = upnp_entry_new (ut, namelist[i]->d_name,
fullpath, entry, 0, true);
if (child)
{
metadata_add_container (ut, child, fullpath);
upnp_entry_add_child (ut, entry, child);
}
}
else
metadata_add_file (ut, entry, fullpath, namelist[i]->d_name, &st);

free (namelist[i]);
free (fullpath);
}
free (namelist);
}


Um grande abraço a todos,

Eduardo


  


2. MELHOR RESPOSTA

Paulo
paulo1205

(usa Ubuntu)

Enviado em 24/10/2018 - 09:46h

A função scandir() lê todos os nomes de objetos contidos num diretório, sejam eles arquivos, subdiretórios, sockets, pipes, links etc., e os coloca todos no mesmo array (namelist, alocado dinamicamente), usando a função alphasort(), que ordena apenas por nome, como critéio de ordenação na lista.

O que você pode fazer é declarar dois outros arrays, um para diretórios e outro para arquivos, e distribuir entre eles os nomes obtidos da chamada anterior a scandir(). Feito isso, aí sim você varreria cada um desses novos arrays separadamente, invocando metadata_add_container() (e todos as outras funções relacionadas) apenas sobre elementos do array de diretórios, e metadata_add_file() apenas sobre os elementos do array de arquivos.

3. Re: Listar arquivos e pastas em ordem alfabética - primeiro pastas depois arquivos [RESOLVIDO]

Eduardo Coutinho Scalabrin
cafaia

(usa Gentoo)

Enviado em 24/10/2018 - 13:50h

Olá, paulo1205!

Hum, entendi, achei que com menos intervenção no código conseguiria ordenar.
Obrigado e grande abraço,

Eduardo






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts