[C con Clase] Consulta de C++

Xiib Eve xiib.eve en gmail.com
Jue Abr 14 00:38:05 CEST 2016


Yo creo que están en el lugar equivocado. Lo que necesitas es contratar 
un freelancer en sitios como freelancer.com o workana.com para que te 
haga el script que necesitas.



On 13/04/16 04:04, Angel MGTech wrote:
> 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
>
>
>
>
>
> _______________________________________________
> Lista de correo Cconclase Cconclase en listas.conclase.net
> http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
> Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ

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


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