Autor Tema: Programa para borrar un/os archivos.  (Leído 5936 veces)

Desconectado Lector

  • Member
  • ***
  • Mensajes: 451
Programa para borrar un/os archivos.
« en: 09 de Junio de 2004, 05:21:34 pm »
Holaaaa... :wink:

Me hacia falta un programa que borrara ciertos archivos cuando se lo ejecuta, previo printf que le avise al usuario lo que va a hacer.
Buscando por ahí encontré este...:

Código: [Seleccionar]

#include <stdio.h>
#include <conio.h>


void Borrar_Fichero(char *);




int main()
{

//tamaño maximo del nombre del archivo o de su ruta si no esta en el mismo directorio donde se ejecuta
char nombref[100];

//pedimos el nombre del fichero a borrar y se lo pasamos a la funcion que lo borra:
printf("Introduce el nombre / ruta del fichero a borrar: ");
gets(nombref);


Borrar_Fichero(nombref);



getch();
return 0;
}




void Borrar_Fichero(char *nf)
{

remove(nf); //borramos
clrscr();
printf("Fichero %s borrado",nf);

}



Creador: TC - The Character

Lo cierto es que incluso esta algo explicado, pero lo que yo nesecitaria es que no haga falta introducir la dirección, como en este caso. Sino que sepa cúal archivo o carpeta tiene que borrar. En mi caso algunas fuentes, que están en "C:\WINDOWS\Fonts".
Pero no sé cómo especificarle la dirección al programa y más aun, varios archivos de una misma carpeta y archivos de diferentes carpetas, también especificos.

Las restricciones que tiene este código son las siguientes...:
-No borra archivos de "solo lectura". (Los archivos que se copian de un CD, por Ejemplo).
-No se pueden borrar carpetas.

Me podrían dar una manito por favor.  :wink:

Un saludo y gracias por anticipado. :wink:
"...cuando las cosas salen como no las espero, la vida te hace más guerrero..."

I say no more & [LogOut].  :cool:

Desconectado Leandros

  • Member
  • ***
  • Mensajes: 421
Programa para borrar un/os archivos.
« Respuesta #1 en: 10 de Junio de 2004, 05:58:37 pm »
Lo bueno sería que el nombre del fichero lo guardase en una variable, y que esa variable la buscase en C: y claro, que te muestre luego la ruta donde se encuentra el archivo y su corespondiente pregunta de si quieres eliminarlo o no...Pensaré en ello ya que hace nada que empecé con ficheros y aún lo tengo todo muy verde.

PD: La semana que viene acabo los examenes, lo estoy aprobando todo :P 8)

Desconectado Lector

  • Member
  • ***
  • Mensajes: 451
Programa para borrar un/os archivos.
« Respuesta #2 en: 10 de Junio de 2004, 08:35:39 pm »
Si vos decis que tiene que ir en una variable, palabra santa. Voy a ver si me sale algo, jirho ya explico algo de variavles, así que voy a probar.

Un saludo y espero más sugerencias.  :wink:

P.D.: Me alegro que te esté llendo bien en los examenes, espero que en los mios se repia eso.  :roll:
"...cuando las cosas salen como no las espero, la vida te hace más guerrero..."

I say no more & [LogOut].  :cool:

Desconectado ALP

  • Member
  • ***
  • Mensajes: 234
Programa para borrar un/os archivos.
« Respuesta #3 en: 10 de Junio de 2004, 11:31:09 pm »
En DOS, dispones de las funciones findfirst() / findnext(), para buscar ficheros. En Windows, tienes FindFirstFile() / FindNextFile().
Las primeras, no creo que soporten nombres largos, aunque dependerá del compilador.

En unix, tendríamos que verlo.

Haré alguna prueba a ver qué tal...

un saludo.
Si no puedes deslumbrar con tu sabiduría, desconcierta con tus gilipolleces.

Desconectado Lector

  • Member
  • ***
  • Mensajes: 451
Programa para borrar un/os archivos.
« Respuesta #4 en: 11 de Junio de 2004, 11:47:41 pm »
Gracias ALP, espro a ver que se te ocurre. mientras voy a ir viendo lo que puedo sacar de la ayuda del Borland.

Un saludo y gracias de nuevo. :wink:
"...cuando las cosas salen como no las espero, la vida te hace más guerrero..."

I say no more & [LogOut].  :cool:

Desconectado Lector

  • Member
  • ***
  • Mensajes: 451
Programa para borrar un/os archivos.
« Respuesta #5 en: 14 de Junio de 2004, 03:49:23 pm »
Hellowwww.  :wink:

Qué tal el fin de semana.? :wink:

Como me has dicho, ALP, en el borland escribí "findfirst" y me fui a la ayuda, lei un poco y compile un ejemplo que daba. Este, también incluia la función findnext, y lo que el programa hacia era mostrar el contenido del directorio actual. También hablaba de las funciones "dos_findfirst" y "dos_findnext" y que para que ambas funcinen se debian incluir las librerias "stdio.h" y "dir.h".

Lo cierto es que mucho no pude hacer, espero que me den una manito con esto a ver como lo puedo ir asociando con lo anterior.

Un saludo y gracias de nuevo. :wink:
"...cuando las cosas salen como no las espero, la vida te hace más guerrero..."

I say no more & [LogOut].  :cool:

Desconectado ALP

  • Member
  • ***
  • Mensajes: 234
Programa para borrar un/os archivos.
« Respuesta #6 en: 15 de Junio de 2004, 12:11:13 am »
Bueno, ahí va una prueba. El programa no borra ficheros (por seguridad), simplemente imprime los nombres al revés. Si pulsas Esc durante la ejecución, el programa se detiene.
Debes pasarle como parámetros directorios y/o nombres de ficheros con o sin wildcards (*, ?). Por ejemplo:

prueba *.c *.obj c:\winnt\fonts


Código: [Seleccionar]
#include <stdio.h>
#include <stdlib.h>
#include <dir.h>
#include <dos.h>
#include <ctype.h>
#include <string.h>

#define ESCAPE 27

int recorre_ficheros(char *);
int hacemos_algo(char *);

/*-----------------------------------------------------*/
int main(int argc, char *argv[])
{
  int i;

  if (argc < 2) {
    printf("Uso: %s <fichero/carpeta> [<fichero/carpeta>]\n", argv[0]);
    return 1;
  }

  /* procesamos todos los parámetros */
  for (i = 1; i < argc; i++)
    recorre_ficheros(argv[i]);
}

/*-----------------------------------------------------*/
int recorre_ficheros(char *nombre)
{
  int error;
  int ret = 0;
  struct ffblk fb;
  char dir_actual[128]={0};

  getcwd(dir_actual, 128);

  printf("\n\nDirectorio actual: %s --> %s\n", dir_actual, nombre);

  /*
     esta primera prueba la hacemos, ya que no tenemos por qué estar
     situados en el directorio "padre"
  */
  if (chdir(nombre) == 0) {
    ret = recorre_ficheros("*.*");
    chdir(dir_actual);
    return ret;
  }

  error = findfirst(nombre, &fb, FA_ARCH|FA_DIREC);
  if (error) {
    printf("No encuentro el fichero %s", nombre);
    return 1;
  }

  do {
    /* no tratamos los directorios "." y ".." */
    if (fb.ff_name[0] == '.')
      continue;

    /* si es un directorio, entramos en él y lo recorremos */
    if ( fb.ff_attrib & FA_DIREC ) {
      /* printf("\n--> directorio [%s] -> [%s]", dir_actual, fb.ff_name); */
      if ( chdir(fb.ff_name) ) {
        perror("chdir:  ");
        continue;
      }
      ret = recorre_ficheros("*.*");
      chdir(dir_actual);
      if (ret == ESCAPE)
        break;
      continue;
    }

    /* esta es la función que realiza el tratamiento de los ficheros  */
    ret = hacemos_algo(fb.ff_name);
    if (ret == ESCAPE)
      break;

  } while ( !findnext(&fb) ); /* siguiente fichero */

  /* restablecemos el directorio original */
  chdir(dir_actual);

  return ret;
}



/*-----------------------------------------------------*/
int hacemos_algo(char *nombre)
{
  int tecla;
  printf("\n\t¿Procesamos fichero: %s (s/n)?", nombre);

  /* esperamos a que el usuario pulse s, n, o escape */
  do {
    tecla = toupper(getch());
  } while (tecla != 'S' && tecla != 'N' && tecla != ESCAPE);

  if (tecla == 'S')
    printf("\t--> \"%s\"\n", nombre, strrev(nombre));

  return tecla;
}



si quieres borrar un fichero, utiliza la función unlink() o remove(). En realidad, remove es una macro que llama a unlink.
Si quieres borrar un directorio, utiliza rmdir(), pero primero, tendrás que borrar todo el contenido, y luego borrar el

directorio.Esto lo harías tras las sentencias (tienes que ponerlo en 2 sitios, al principio de recorre ficheros y en el bucle)
Código: [Seleccionar]

    ret = recorre_ficheros("*.*");
    chdir(dir_actual);
    rmdir(nombre);



Las funciones findfirst()/findnext() no permiten nombres largos, por lo que si te topas con uno, verás su nombre en la versión corta (8+3) como si hicieras un "dir /x" en w2k. Puedes ver que el campo ff_name de la estructura ffblk tiene 13 posiciones (12 + nulo) para almacenar el nombre.

Si vas a trabajar en windows, te recomiendo que utilices las funciones que proporciona windows ya que permiten el tratamiento de nombres largos, y son algo más completas.

Lo he realizado con TurboC.

un saludo.
Si no puedes deslumbrar con tu sabiduría, desconcierta con tus gilipolleces.

Desconectado Lector

  • Member
  • ***
  • Mensajes: 451
Programa para borrar un/os archivos.
« Respuesta #7 en: 15 de Junio de 2004, 02:33:50 pm »
:shock:  :shock:  :shock:  :shock:

Gracias ALP, la verdad es que no pensé que fuese tan largo, ayer estuve leyendo algo de unlink(en la ayuuda del Borland), también pensando en cómo hacer para integrar lo que estaba leyendo con lo que necesito, pero no se me ocuriro nada (ahora que veo el código me doy cuenta porqué :oops:  :lol: ).

Te agradezco muchísimo y dame un día para entender lo más posible el código, es que no sólo quiero usar el programa, sino entenderlo lo mejor posible para mí.

Te agradezco de nuevo y un saludo. :wink:
"...cuando las cosas salen como no las espero, la vida te hace más guerrero..."

I say no more & [LogOut].  :cool:

 

Aviso Legal | Política de Privacidad | Política de Cookies

el contenido de la web se rige bajo licencia
Creative Commons License