Cómo obtener una lista de todos los archivos en el directorio por tipo en C

tengo que simular el ls función de unix in C.

Tengo que crear un programa para "Obtener todos los archivos en cualquier directorio por tipo en C".

Busqué en Google y encontré programas que obtienen listas de archivos, pero están ordenados alfabéticamente; Quiero ordenados por tipo de archivo. ¿Puede alguien ayudarme?

preguntado el 24 de agosto de 12 a las 06:08

Recuperar. Clasificar. Mostrar. -

La lógica lo sé, pero cómo puedo ordenar, imprimo directamente el nombre del archivo en la consola, incluso si almaceno los nombres en una matriz, nuevamente tengo que escribir una lógica complicada para obtener los tipos de archivo y luego ordenarlos, ¿hay alguna manera mejor o comando directo para esto. -

No estoy seguro de por qué un tipo de archivo sería una lógica complicada, pero si lo es, lo es. No estoy seguro si es lo que estás pidiendo, pero puedes usar qsort para el punto de clasificación. La mayoría de las alternativas más simples implicarían algún otro lenguaje (por ejemplo, Python o C++ con Boost.Filesystem) -

¡"extensión" no es lo mismo que "tipo de archivo"! Puedo llamar a mi archivo "bild.jpg", pero en realidad podría ser un documento de oficina. ("archivo man" es un buen punto de partida) -

Puede empezar mirando el opendir función. -

1 Respuestas

Usted debe: almacenar los archivos en algún lugar de la memoria. Dado que esto parece un proyecto escolar, sugeriría cargar los nombres de los archivos en una lista vinculada y emplear uno de los algoritmos para ordenar las listas vinculadas. Este bien podría ser el propósito del ejercicio en sí.

Para file type supongamos "extensión", es decir, un .MP3 es del tipo "Fraunhofer MPEG Layer 3", incluso si alguien hubiera cambiado el nombre de un archivo .WMA y lo hubiera llamado .MP3. Para detectar el tipo de archivo "verdadero", necesitaría emplear algo llamado "archivo mágico", y existe una libmagic, pero ¿vale la pena? (Si es una tesis de doctorado o un programa comercial, la respuesta es 'diablos, sí'. Si el programa debe ser calificado por su profesor promedio, entonces usted juzga si corre el riesgo de ser considerado 'demasiado inteligente').

La entrada de la lista enlazada debe ser un struct que contiene el nombre del archivo y un puntero a su extensión; esto último lo puede encontrar considerando que la extensión es "lo que sigue al último punto en el nombre del archivo", por lo que puede aprovechar la strrchr función. Recuerde que algunos archivos no tendrán extensión.

Usted juzga si emplear un truco para ahorrar memoria, como almacenar el puntero a la extensión o duplicar la extensión con strdup. El primero es más rápido y eficiente, pero debe recordar que el primer puntero de estructura (nombre de archivo) DEBE liberarse y el segundo ABSOLUTAMENTE NO DEBE liberarse. Hacer que dos punteros se comporten de manera diferente puede considerarse una mala práctica de codificación (lo es) o un truco inteligente (lo es), dependiendo de si valora el tiempo de mantenimiento o la velocidad/memoria.

En cuanto a la recuperación de nombres de archivos en sí, no existe una forma totalmente portátil, por lo que esto ha llevado al desarrollo de bibliotecas como Boost. Pero para un proyecto escolar, tal vez podría restringirse a los sistemas POSIX y usar opendir, readdir, closedir y stat.

Una buena práctica y lo más inteligente sería separar las operaciones (recuperación de directorios, clasificación de listas, visualización de listas) en diferentes funciones, de modo que pueda probarlas por separado y de forma incremental (p. ej., la recuperación de carpetas recupera todo y puede mostrar los archivos en orden desordenado, etc.).

Respondido 24 ago 12, 07:08

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.