Hacer un ls en C
Resuelto
Jayjaynam
Mensajes publicados
2
Estado
Miembro
-
Jayjaynam Mensajes publicados 2 Estado Miembro -
Jayjaynam Mensajes publicados 2 Estado Miembro -
Hola, estoy intentando reproducir el funcionamiento de ls en C, pero tengo un problema. Aquí está mi código:
El problema está en la línea donde comparo cadenas. La tercera comparación es incorrecta y lo sé, pero en realidad, solo quiero comparar mi cadena de caracteres con .* para eliminar todos los archivos ocultos de la lista que se mostrará como en ls. En este punto, me gustaría que me ayudaran porque no tengo ni idea de cómo hacerlo.
Gracias de antemano por sus respuestas.
Jayjaynam
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <dirent.h>
int main(int argc, char **argv){
DIR* rep = NULL;
struct dirent* fichierLu = NULL;
if((rep = opendir("/home/jayjay/projetres")) == NULL){
perror("El archivo no se pudo abrir");
exit(1);
}
while((fichierLu = readdir(rep)) != NULL){
if(strcmp(fichierLu->d_name, ".") != 0 && strcmp(fichierLu->d_name, "..") != 0 && strcmp(fichierLu->d_name, ".*") != 0){
printf("%s\n", fichierLu->d_name);
}
}
}
El problema está en la línea donde comparo cadenas. La tercera comparación es incorrecta y lo sé, pero en realidad, solo quiero comparar mi cadena de caracteres con .* para eliminar todos los archivos ocultos de la lista que se mostrará como en ls. En este punto, me gustaría que me ayudaran porque no tengo ni idea de cómo hacerlo.
Gracias de antemano por sus respuestas.
Jayjaynam
2 respuestas
-
Hola Jayjaynam,
https://man7.org/linux/man-pages/man3/readdir.3.html
Como la estructuradirent
contiened_name[256]
, que es una cadena C, solo necesitas verificar que el primer carácter del arreglo d_name no sea un punto.
Haces esto de forma sencilla así:
if ( (strcmp(fichierLu->d_name, "..") != 0) && (fichierLu->d_name[0] != '.') ) {
Esto también permite eliminar la prueba(strcmp(fichierLu->d_name, ".") != 0)
ya que este caso está de todas formas cubierto por la prueba de desigualdad del primer carácter con el punto.
Dal -
Ah sí, efectivamente, había olvidado completamente lo básico... Gracias a ti, funciona bien y por lo tanto podré seguir entrenando.
El tema se puede cerrar.
Muchas gracias y que tengas un buen día.
Jayjaynam.