<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>