[C con Clase] Consulta de C++

Angel MGTech contactaangel en gmail.com
Mie Abr 13 11:04:35 CEST 2016


Buenos días, soy un sysadmin y la verdad que no tengo demasiada idea de
programación. El tema esta que en el trabajo me pidieron un proceso que
hiciera lo siguiente:

debe leer los nombres de ficheros de la carpeta de una carpeta por ejemplo
c:\Origen la estructura de los ficheros es la siguiente
 "12345678__Pepe_Martinez__presupuesto.xls"

en la ruta c:\Destino existirán ya creadas las siguientes carpetas
 "12345678__Pepe_Martinez"

el programa debe fijarse en los 8 primeros dígitos, "12345678" y mover
dichos ficheros que tengan el mismo código, pueden ser .doc, .xls, etc... y
moverlos a su carpeta correspondiente

" 12345678__Pepe_Martinez" debe comparar solo los 8 dígitos de la carpeta y
moverlos dentro si es el mismo codigo, en caso de que se produzca algun
error como:

                >  que no se encuentre la carpeta

                > el fichero no cumpla los requisitos, no tenga 8 digitos,
sean menos o mas....


Debe moverlo a otra carpeta por ejemplo c:\Errores.


Tengo un programita que hace algo parecido, pero no se como adaptarlo:



//---------------------------------------------------------------------------

#include <stdio.h>

#include <stdlib.h>

#include <ctype.h>

#include <limits.h>

#include <string.h>

#include <dirent.h>

//---------------------------------------------------------------------------

#define ERROR_SUCCESS 0



void error(const char *s);

int ObtenerLargoCodigo(char* nombreArchivo);

int ObtenerNombreDirectorio(char* nombreArchivo,char* nombreDirectorio);

int CrearDirectorio(char* nombreDirectorio,char* ruta);

int MoverArchivos(char* rutaOrigen,char* rutaDestino);

//---------------------------------------------------------------------------



int main(int argc, char* argv[])

{

    //Cambiar las rutas por las deseadas

    char rutaOrigen[]={"C:\\Origen"};

    char rutaDestino[]={"C:\\Destino"};



    printf("Directorio raiz de origen: %s\n",rutaOrigen);

    printf("Directorio raiz de destino: %s\n",rutaDestino);

    if(MoverArchivos(rutaOrigen,rutaDestino)!=EXIT_SUCCESS)

        printf("Asegurese de que la ruta del directorio es correcta\n");

    system("PAUSE");

    return 0;

}

//---------------------------------------------------------------------------



int MoverArchivos(char* rutaOrigen,char* rutaDestino)

{

    DIR *dirOrigen,*dirDestino;

    struct dirent *ent;

    int retval,nleidos=0,nmovidos=0,ncodigoincorrecto=0,nDirCreados=0;

    int ret;

    char auxRutaOrigen[MAX_PATH],auxRutaDestino[MAX_PATH];

    char nombreDir[MAX_PATH];



    printf("=====================================================\n");

    dirOrigen=opendir(rutaOrigen);

    if(dirOrigen==NULL){

        error("No puedo abrir el directorio de origen");

        retval=EXIT_FAILURE;

    }else{

        dirDestino=opendir(rutaDestino);

        if(dirDestino==NULL){

            error("No puedo abrir el directorio de destino");

            retval=EXIT_FAILURE;

        }else{

            closedir(dirDestino);

            while((ent=readdir(dirOrigen)) != NULL){


if((strcmp(ent->d_name,".")!=0)&&(strcmp(ent->d_name,"..")!=0)){

                    ret=ObtenerLargoCodigo(ent->d_name);



                    if(ret==8){


if(ObtenerNombreDirectorio(ent->d_name,nombreDir)==ERROR_SUCCESS){


sprintf(auxRutaOrigen,"%s\\%s",rutaOrigen,ent->d_name);


if(CrearDirectorio(nombreDir,rutaDestino)==ERROR_SUCCESS){

                                printf("Se ha creado el directorio
\"%s\"\n",nombreDir);

                                nDirCreados++;

                            }


sprintf(auxRutaDestino,"%s\\%s\\%s",rutaDestino,nombreDir,ent->d_name);


if(rename(auxRutaOrigen,auxRutaDestino)==ERROR_SUCCESS){

                                printf("El archivo \"%s\" se movio al
directorio \"%s\n",ent->d_name,nombreDir);

                                nmovidos++;

                            }else{

                                printf("Huvo algun error al mover el
archivo \"%s\" al directorio \"%s\"\n",ent->d_name,nombreDir);

                            }

                        }

                        nleidos++;

                    }else{

                        ncodigoincorrecto++;

                    }

                }

            }


printf("=====================================================\n");



            if(nleidos > 0)

                printf("Se han movido %i de %i
archivos\n",nmovidos,nleidos+ncodigoincorrecto);

            else if(ncodigoincorrecto==0)

                printf("No se han encontrado archivos\n");

            if(ncodigoincorrecto > 0)

                printf("Se encontraron %i archivos con codigo de cliente
incorrectos\n",ncodigoincorrecto);

            if(nDirCreados > 0)

                printf("Se han creado %i directorios\n",nDirCreados);

            else

                printf("No se han creado directorios\n");

            retval=EXIT_SUCCESS;

        }

        closedir(dirOrigen);

    }

    return retval;

}

//---------------------------------------------------------------------------



int ObtenerLargoCodigo(char* nombreArchivo)

{

    char ncliente[MAX_PATH],*ptr;

    int i,pos=0,retval=0;



    memset(ncliente,'\0',sizeof(ncliente));

    ptr = strstr(nombreArchivo, "__");

    pos=((int)ptr)-(int)nombreArchivo;

    strncpy(ncliente,nombreArchivo,pos);



    for(i=0;i<strlen(ncliente);i++){

        if(isdigit(ncliente[i])==1)

            retval++;

        else

            break;

    }

    return retval;

}

//---------------------------------------------------------------------------



int CrearDirectorio(char* nombreDirectorio,char* ruta)

{

   int retval;

   char aux[MAX_PATH]={0};



   sprintf(aux,"%s\\%s",ruta,nombreDirectorio);

   retval=mkdir(aux);

   return retval;

}

//---------------------------------------------------------------------------



int ObtenerNombreDirectorio(char* nombreArchivo,char* nombreDirectorio)

{

    int pos=0,retval;

    char *ptr;



    memset(nombreDirectorio,'\0',MAX_PATH);



    while( (ptr = strstr(&nombreArchivo[pos], "__")) != NULL ){

        pos=((int)ptr+2)-(int)nombreArchivo;

    }

    if(pos >= 2)

        pos-=2;

    strncpy(nombreDirectorio,nombreArchivo,pos);

    if(strlen(nombreDirectorio)>0)

        retval=EXIT_SUCCESS;

    else

        retval=EXIT_FAILURE;

    return retval;

}

//---------------------------------------------------------------------------



void error(const char *s)

{

    /* perror() devuelve la cadena S y el error (en cadena de caracteres)
que tenga errno */

    perror(s);

}

//---------------------------------------------------------------------------





Si me pudierais ayudar lo agradecería bastante,


Saludos
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20160413/a79e0f4d/attachment.html>


Más información sobre la lista de distribución Cconclase