EL_H4K Posted August 13, 2010 Report Share Posted August 13, 2010 (edited) Ya, este pequeño tuto se los dejo para los que quieran aprender un poco de la programación en Linux, ya que en este aspecto hay muchas diferencias con Windows. Usaremos sólo funcones estándar o pseudoestándar para nuestros propósitos. En este ejemplo que hice, buscaremos todos los archivos finalizados en .db en un directorio que nos pasan como argumento y los eliminaremos. //incluiremos algunas librerías #include <stdio.h> #include <stdlib.h> #include <string.h> #include <dirent.h> #include <sys/types.h> #include <stddef.h> #include <unistd.h> //la dirent es la librería que contiene funciones útiles para el manejo de directorio, y es la que usaremos. //las funciones que implementaremos en el programa son las que siguen: //dibujamos un menu en caso que no hayan o haya más de un argumento void menu(); //Encontrar la extensión de un archivo char* find_ext(char *); //borrar el archivo con extensión .ext int remove_file(char *, char *, char *); //buscar archivos void search_db(char *); //Por cuestión de comodidad el menu no lo pondremos y nos iremos directo a las funciones que nos interesan: //En el main ejecutamos el menu en caso que nos pasen un número distinto de argumentos que 1 //en el caso que sea 1, nos correos un espacio en la matriz y le pasamos la cadena que contiene el directorio a buscar a la funcion search_db int main(int argc, char** argv) { if (argc!=2) menu(); else if (argc==2){ argv++; search_db(*argv); } return 0; } //Encontremos la extensión, recibimos una cadena, y buscamos hasta el final, luego desde el final nos vamos corriendo hasta encontrar //el último punto... todo esto muy entretenido de programar :) char* find_ext(char *file) { int flag=0; char point[1]; for(;*(file+1);file++); for(;*(file);file--){ point[0]=file[0]; if(strcmp(point,".")==0) { flag=1; break; } } if (flag==1) return file; //si el archivo posee extensión retornamos la extensión (ej: music.mp3 devuelve .mp3) else return NULL; //si el archivo no tiene extensión retornamos NULL } //Ahora implementamos la función que elimina un archivo, le pasamos el directorio, el nombre de archivo y su extensión int remove_file(char *direc, char *file, char *ext) { int flag; char *archive; archive=(char*)malloc(sizeof(char)*(strlen(direc)+strlen(file))); strcpy(archive,direc); strcat(archive,"/"); strcat(archive,file); //concatenamos para poder tener la dirección del archivo completa //si la extensión es .db, eliminamos el archivo con unlink if (strcmp(ext,".db")==0){ flag=unlink((const char*)archive); if (flag==1){ printf("\nERROR: couldn't remove %s , have you the super cow power?\n", archive); return 0; } else { printf("\n%s was deleted", archive); return 1; } } else return 0; } //Ahora la función mas importante, la explicaré paso a paso void search_db(char *direc) { printf("\n\nSearching on %s", direc); //declaramos un dato del tipo DIR DIR *buff; //y una estructura de tipo dirent /*esta estructura posee varios miembros, pueden googlear para ver cuales son todos, pero nosotros usaremos 2, d_name y d_type d_name es obvio lo que hace, pero d_type no tanto. d_type especifica el tipo de archivo que se tiene, si es 8, entonces es un archivo, si es 6, es una carpeta*/ struct dirent *list; //acá ocupamos el buffer de tipo DIR que habíamos ocupado antes, y abrimos el directorio que nos pasaron con la funcion opendir buff=opendir(direc); char *ext; int cont=0; //si el directorio existe if (buff != NULL){ //este while dara falso si no se encuentran más archivos //readdir nos devolverá un archivo o carpeta perteneciente al directorio en el que estamos buscando while (list = readdir(buff)){ //si el archivo es del tipo 8 (archivo, no directorio), le buscamos la extensión if (list->d_type == 8){ ext=find_ext(list->d_name); //si la extensión existe, removemos el archivo, pero a la vez vamos aumentando un contador para saber cuantos archivos eliminamos //recordar que remove_file devolvía 1 o 0 if(ext!=NULL){ cont = cont + remove_file(direc, list->d_name, ext); } } } //cerramos el directorio, esto es muy importante no olvidarlo (void) closedir (buff); } else perror ("Couldn't open the directory"); printf ("\nFiles deleted: %d\n", cont); } //y ese es nuestro programa, pueden seguir investigando usando google o su manual del programador de linux para mayores detalles pueden descargar el archivo con menu y todo funcional acá: http://www.box.net/shared/fl6lm6i8ma saludos :) Edited August 13, 2010 by EL_H4K Link to comment Share on other sites More sharing options...
mapeca Posted August 16, 2010 Report Share Posted August 16, 2010 Muchas gracias por el aporte :bravo: leyendo y aprendiendo :banana: Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now