Cómo ordenar archivos en algún directorio por los nombres en Linux

Uso opendir() y readdir() para mostrar los nombres de los archivos en un directorio. Pero están desordenados. ¿Cómo puedo ordenarlos? El lenguaje es C.

La forma idiomática de ordenar algo en C es usar la función qsort() . Para que esto funcione, es mejor si puede organizar que todos los nombres de los archivos se recopilen en una matriz de punteros y luego ordene la matriz.

Esto no es demasiado difícil, pero requiere un poco de administración de arreglos dynamics o la introducción de límites estáticos en las cosas (longitud máxima de los nombres de archivos, número máximo de archivos).

¿Quizás podrías usar scandir () en lugar de opendir y readdir?

 #include  #include  #include  int main(void) { struct dirent **namelist; int n; n = scandir(".", &namelist, 0, alphasort); if (n < 0) perror("scandir"); else { while (n--) { printf("%s\n", namelist[n]->d_name); free(namelist[n]); } free(namelist); } } 

Debe construir dinámicamente una estructura de datos que contenga los nombres de archivo y asegurarse de que esté ordenada.

Podría crear una matriz o lista de enlaces con los nombres y luego ordenarlos, pero mi preferencia es ordenar los valores en la inserción insertándolos en un árbol binario.