<div dir="ltr">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:<div><br></div><div><p class="MsoNormal"><span lang="ES-TRAD">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"</span></p>

<p class="MsoNormal"><span lang="ES-TRAD">en la
ruta c:\Destino existirán ya creadas las siguientes carpetas  "12345678__Pepe_Martinez"</span></p>

<p class="MsoNormal"><span lang="ES-TRAD">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 </span></p>

<p class="MsoNormal"><span lang="ES-TRAD">"
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:</span></p>

<p class="MsoNormal"><span lang="ES-TRAD">                >  que no se encuentre la carpeta</span></p>

<p class="MsoNormal"><span lang="ES-TRAD">                > el fichero no cumpla los
requisitos, no tenga 8 digitos, sean menos o mas....  </span></p>

<p class="MsoNormal"><span lang="ES-TRAD"><br></span></p><p class="MsoNormal"><span lang="ES-TRAD">Debe
moverlo a otra carpeta por ejemplo c:\Errores.</span></p><p class="MsoNormal"><span lang="ES-TRAD"><br></span></p><p class="MsoNormal"><span lang="ES-TRAD">Tengo un programita que hace algo parecido, pero no se como adaptarlo:</span></p><p class="MsoNormal"><br></p><p class="MsoNormal"><span lang="ES-TRAD"><br></span></p><p class="MsoNormal">//---------------------------------------------------------------------------</p><p class="MsoNormal">#include <stdio.h></p><p class="MsoNormal">#include <stdlib.h></p><p class="MsoNormal">#include <ctype.h></p><p class="MsoNormal">#include <limits.h></p><p class="MsoNormal">#include <string.h></p><p class="MsoNormal">#include <dirent.h></p><p class="MsoNormal">//---------------------------------------------------------------------------</p><p class="MsoNormal">#define ERROR_SUCCESS 0</p><p class="MsoNormal"> </p><p class="MsoNormal">void error(const char *s);</p><p class="MsoNormal">int ObtenerLargoCodigo(char* nombreArchivo);</p><p class="MsoNormal">int ObtenerNombreDirectorio(char* nombreArchivo,char* nombreDirectorio);</p><p class="MsoNormal">int CrearDirectorio(char* nombreDirectorio,char* ruta);</p><p class="MsoNormal">int MoverArchivos(char* rutaOrigen,char* rutaDestino);</p><p class="MsoNormal">//---------------------------------------------------------------------------</p><p class="MsoNormal"> </p><p class="MsoNormal">int main(int argc, char* argv[])</p><p class="MsoNormal">{</p><p class="MsoNormal">    //Cambiar las rutas por las deseadas</p><p class="MsoNormal">    char rutaOrigen[]={"C:\\Origen"};</p><p class="MsoNormal">    char rutaDestino[]={"C:\\Destino"};</p><p class="MsoNormal"> </p><p class="MsoNormal">    printf("Directorio raiz de origen: %s\n",rutaOrigen);</p><p class="MsoNormal">    printf("Directorio raiz de destino: %s\n",rutaDestino);</p><p class="MsoNormal">    if(MoverArchivos(rutaOrigen,rutaDestino)!=EXIT_SUCCESS)</p><p class="MsoNormal">        printf("Asegurese de que la ruta del directorio es correcta\n");</p><p class="MsoNormal">    system("PAUSE");</p><p class="MsoNormal">    return 0;</p><p class="MsoNormal">}</p><p class="MsoNormal">//---------------------------------------------------------------------------</p><p class="MsoNormal"> </p><p class="MsoNormal">int MoverArchivos(char* rutaOrigen,char* rutaDestino)</p><p class="MsoNormal">{</p><p class="MsoNormal">    DIR *dirOrigen,*dirDestino;</p><p class="MsoNormal">    struct dirent *ent;</p><p class="MsoNormal">    int retval,nleidos=0,nmovidos=0,ncodigoincorrecto=0,nDirCreados=0;</p><p class="MsoNormal">    int ret;</p><p class="MsoNormal">    char auxRutaOrigen[MAX_PATH],auxRutaDestino[MAX_PATH];</p><p class="MsoNormal">    char nombreDir[MAX_PATH];</p><p class="MsoNormal"> </p><p class="MsoNormal">    printf("=====================================================\n");</p><p class="MsoNormal">    dirOrigen=opendir(rutaOrigen);</p><p class="MsoNormal">    if(dirOrigen==NULL){</p><p class="MsoNormal">        error("No puedo abrir el directorio de origen");</p><p class="MsoNormal">        retval=EXIT_FAILURE;</p><p class="MsoNormal">    }else{</p><p class="MsoNormal">        dirDestino=opendir(rutaDestino);</p><p class="MsoNormal">        if(dirDestino==NULL){</p><p class="MsoNormal">            error("No puedo abrir el directorio de destino");</p><p class="MsoNormal">            retval=EXIT_FAILURE;</p><p class="MsoNormal">        }else{</p><p class="MsoNormal">            closedir(dirDestino);</p><p class="MsoNormal">            while((ent=readdir(dirOrigen)) != NULL){</p><p class="MsoNormal">                if((strcmp(ent->d_name,".")!=0)&&(strcmp(ent->d_name,"..")!=0)){</p><p class="MsoNormal">                    ret=ObtenerLargoCodigo(ent->d_name);</p><p class="MsoNormal"> </p><p class="MsoNormal">                    if(ret==8){</p><p class="MsoNormal">                        if(ObtenerNombreDirectorio(ent->d_name,nombreDir)==ERROR_SUCCESS){</p><p class="MsoNormal">                            sprintf(auxRutaOrigen,"%s\\%s",rutaOrigen,ent->d_name);</p><p class="MsoNormal">                            if(CrearDirectorio(nombreDir,rutaDestino)==ERROR_SUCCESS){</p><p class="MsoNormal">                                printf("Se ha creado el directorio \"%s\"\n",nombreDir);</p><p class="MsoNormal">                                nDirCreados++;</p><p class="MsoNormal">                            }</p><p class="MsoNormal">                            sprintf(auxRutaDestino,"%s\\%s\\%s",rutaDestino,nombreDir,ent->d_name);</p><p class="MsoNormal">                            if(rename(auxRutaOrigen,auxRutaDestino)==ERROR_SUCCESS){</p><p class="MsoNormal">                                printf("El archivo \"%s\" se movio al directorio \"%s\n",ent->d_name,nombreDir);</p><p class="MsoNormal">                                nmovidos++;</p><p class="MsoNormal">                            }else{</p><p class="MsoNormal">                                printf("Huvo algun error al mover el archivo \"%s\" al directorio \"%s\"\n",ent->d_name,nombreDir);</p><p class="MsoNormal">                            }</p><p class="MsoNormal">                        }</p><p class="MsoNormal">                        nleidos++;</p><p class="MsoNormal">                    }else{</p><p class="MsoNormal">                        ncodigoincorrecto++;</p><p class="MsoNormal">                    }</p><p class="MsoNormal">                }</p><p class="MsoNormal">            }</p><p class="MsoNormal">            printf("=====================================================\n");</p><p class="MsoNormal"> </p><p class="MsoNormal">            if(nleidos > 0)</p><p class="MsoNormal">                printf("Se han movido %i de %i archivos\n",nmovidos,nleidos+ncodigoincorrecto);</p><p class="MsoNormal">            else if(ncodigoincorrecto==0)</p><p class="MsoNormal">                printf("No se han encontrado archivos\n");</p><p class="MsoNormal">            if(ncodigoincorrecto > 0)</p><p class="MsoNormal">                printf("Se encontraron %i archivos con codigo de cliente incorrectos\n",ncodigoincorrecto);</p><p class="MsoNormal">            if(nDirCreados > 0)</p><p class="MsoNormal">                printf("Se han creado %i directorios\n",nDirCreados);</p><p class="MsoNormal">            else</p><p class="MsoNormal">                printf("No se han creado directorios\n");</p><p class="MsoNormal">            retval=EXIT_SUCCESS;</p><p class="MsoNormal">        }</p><p class="MsoNormal">        closedir(dirOrigen);</p><p class="MsoNormal">    }</p><p class="MsoNormal">    return retval;</p><p class="MsoNormal">}</p><p class="MsoNormal">//---------------------------------------------------------------------------</p><p class="MsoNormal"> </p><p class="MsoNormal">int ObtenerLargoCodigo(char* nombreArchivo)</p><p class="MsoNormal">{</p><p class="MsoNormal">    char ncliente[MAX_PATH],*ptr;</p><p class="MsoNormal">    int i,pos=0,retval=0;</p><p class="MsoNormal"> </p><p class="MsoNormal">    memset(ncliente,'\0',sizeof(ncliente));</p><p class="MsoNormal">    ptr = strstr(nombreArchivo, "__");</p><p class="MsoNormal">    pos=((int)ptr)-(int)nombreArchivo;</p><p class="MsoNormal">    strncpy(ncliente,nombreArchivo,pos);</p><p class="MsoNormal"> </p><p class="MsoNormal">    for(i=0;i<strlen(ncliente);i++){</p><p class="MsoNormal">        if(isdigit(ncliente[i])==1)</p><p class="MsoNormal">            retval++;</p><p class="MsoNormal">        else</p><p class="MsoNormal">            break;</p><p class="MsoNormal">    }</p><p class="MsoNormal">    return retval;</p><p class="MsoNormal">}</p><p class="MsoNormal">//---------------------------------------------------------------------------</p><p class="MsoNormal"> </p><p class="MsoNormal">int CrearDirectorio(char* nombreDirectorio,char* ruta)</p><p class="MsoNormal">{</p><p class="MsoNormal">   int retval;</p><p class="MsoNormal">   char aux[MAX_PATH]={0};</p><p class="MsoNormal"> </p><p class="MsoNormal">   sprintf(aux,"%s\\%s",ruta,nombreDirectorio);</p><p class="MsoNormal">   retval=mkdir(aux);</p><p class="MsoNormal">   return retval;</p><p class="MsoNormal">}</p><p class="MsoNormal">//---------------------------------------------------------------------------</p><p class="MsoNormal"> </p><p class="MsoNormal">int ObtenerNombreDirectorio(char* nombreArchivo,char* nombreDirectorio)</p><p class="MsoNormal">{</p><p class="MsoNormal">    int pos=0,retval;</p><p class="MsoNormal">    char *ptr;</p><p class="MsoNormal"> </p><p class="MsoNormal">    memset(nombreDirectorio,'\0',MAX_PATH);</p><p class="MsoNormal"> </p><p class="MsoNormal">    while( (ptr = strstr(&nombreArchivo[pos], "__")) != NULL ){</p><p class="MsoNormal">        pos=((int)ptr+2)-(int)nombreArchivo;</p><p class="MsoNormal">    }</p><p class="MsoNormal">    if(pos >= 2)</p><p class="MsoNormal">        pos-=2;</p><p class="MsoNormal">    strncpy(nombreDirectorio,nombreArchivo,pos);</p><p class="MsoNormal">    if(strlen(nombreDirectorio)>0)</p><p class="MsoNormal">        retval=EXIT_SUCCESS;</p><p class="MsoNormal">    else</p><p class="MsoNormal">        retval=EXIT_FAILURE;</p><p class="MsoNormal">    return retval;</p><p class="MsoNormal">}</p><p class="MsoNormal">//---------------------------------------------------------------------------</p><p class="MsoNormal"> </p><p class="MsoNormal">void error(const char *s)</p><p class="MsoNormal">{</p><p class="MsoNormal">    /* perror() devuelve la cadena S y el error (en cadena de caracteres) que tenga errno */</p><p class="MsoNormal">    perror(s);</p><p class="MsoNormal">}</p><p class="MsoNormal"><span lang="ES-TRAD"></span></p><p class="MsoNormal">//---------------------------------------------------------------------------</p><p class="MsoNormal"><span lang="ES-TRAD"><br></span></p><p class="MsoNormal"><span lang="ES-TRAD"><br></span></p><p class="MsoNormal"><span lang="ES-TRAD"><br></span></p><p class="MsoNormal"><span lang="ES-TRAD"><br></span></p><p class="MsoNormal"><span lang="ES-TRAD">Si me pudierais ayudar lo agradecería bastante,</span></p><p class="MsoNormal"><span lang="ES-TRAD"><br></span></p><p class="MsoNormal"><span lang="ES-TRAD">Saludos</span></p><p class="MsoNormal"><span lang="ES-TRAD"><br></span></p><p class="MsoNormal"><span lang="ES-TRAD"><br></span></p></div></div>