[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