Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - bemone

#1
Cita de: ivancea96 en 29 Agosto 2015, 01:20 AM
Array* getArrayInstance(){
    Array *vec;
    vec = (Array*) malloc (sizeof(Persona));
    vec->size = 0;
    return vec;
}


(Array*) malloc(sizeof(Persona));

Si vas a crear un Array, entonces tendrás que poner sizeof(Array), puesto que Array tiene un tamaño de sizeof(Persona*) + sizeof(int) = 8 bytes, mientras que Persona tiene un tamaño de 12 bytes.

Perdon, creo que me exprese mal.
Quiero un Array dinamico dentro de una estructura.
Lo que me decis vos es para crear un array de Array.
#2
Buenas tardes gente,

Estoy aprendiendo C y me estoy rompiendo el marote contra la pared bien fuerte.
Tengo una estructura Persona. La cual quiero manipularla dinamicamente a traves de la estructura Array (TDA) y me surgio un problema que desconozco a que se puede deber.

Si cargo el array desde el main() todo funciona perfecto. Cuando lo quiero cargar a traves de un metodo, se rompe todo.

He aqui el codigo:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

typedef struct persona{
   char *nombre;
   int edad;
   int sexo;
}Persona;

typedef struct {
   int size;
   Persona vecPersona[];
}Array;

Array* getArrayInstance(){
   Array *vec;
   vec = (Array*) malloc (sizeof(Persona));
   vec->size = 0;
   return vec;
}

void push_back(Array ** vec, Persona tipito){
   (*vec)->vecPersona[(*vec)->size] = tipito;
   (*vec)->size++;
   printf("%d-", (*vec)->size);
   int newSize = (*vec)->size*2-(*vec)->size+1;
   Array *tmp = realloc((*vec), newSize*sizeof(Persona));
   if(tmp)
       *vec = tmp;
   else
       (*vec)->size--;
}

void mostrarPersonas(Array *vec){
   int i;
   printf("\n\n");
   printf("%d", vec->size);
   for(i=0; i<vec->size; i++){
       printf("(%d) Nombre: %s - Edad: %d - Sexo: ", i, vec->vecPersona[i].nombre, vec->vecPersona[i].edad);
       if(vec->vecPersona[i].sexo == 0)
           printf("Masculino");
       else
           printf("Femenino");
       printf("\n");
   }
}

void cargarPersonas(Array **vec){
   int i, edad, random;
   int cantPersonas = rand()%30+1;
   Persona aux;
   char **hombres = {"Ramiro","Pedro","Federico","Jose","Antonio","Pablo","Raul","Gustavo","Gonzalo","Airton"};
   char **mujeres = {"Mariana","Jennifer","Luz","Roxana","Ana","Sol","Micaela","Romina","Melina","Camila"};
   for(i=0; i<cantPersonas; i++){
       edad = rand()%80+1;
       aux.edad = edad;
       if( (random = rand()%10) %2 == 0){ // hombres
           aux.nombre = hombres[random];
           aux.sexo = 0;
       }
       else{
           aux.nombre = mujeres[random];
           aux.sexo = 1;
       }

       push_back(vec, aux);
   }
}


int main()
{
   srand(time(NULL));
   Array *vecPersonas = getArrayInstance();

   Persona aux;
   aux.nombre="Cecilia";
   aux.edad=27;
   aux.sexo=0;
   push_back(&vecPersonas, aux); // Esto anda
   push_back(&vecPersonas, aux); // Esto anda
   push_back(&vecPersonas, aux); // Esto anda
   push_back(&vecPersonas, aux); // Esto anda
   push_back(&vecPersonas, aux); // Esto anda
   push_back(&vecPersonas, aux); // Esto anda

   //cargarPersonas(&vecPersonas); // Esto no
   //printf("%d", vecPersonas->size);
   mostrarPersonas(vecPersonas);

   return 0;
}



:-\ :-\
#3
Cita de: ivancea96 en 24 Marzo 2015, 16:35 PM
Prueba a poner el directorio actual del ejecutable fuera de la carpeta.

Mientras que no encuentras solución, system("RD /S /Q ruta").

Lo ejecuto compilando y esta en otro directorio muy lejos.
Por mas que use la consola del sistema el error es el mismo, por lo menos aca esta traducido  :xD

El proceso no tiene acceso al archivo porque está siendo utilizado por otro proceso
#4
Cita de: ivancea96 en 24 Marzo 2015, 16:22 PM
Probaste a borrarlo en caso de que el directorio ya esté vacío, poniendo en el programa solo la parte de borrado del directorio?

Si lo he probado, sigue saltando el mismo error.
Gracias por la perseverancia  ;-)
#5
Cita de: ivancea96 en 24 Marzo 2015, 15:55 PM
¿En qué parte eliminas el directorio?

Justamente después de eliminar todos los archivos que haya dentro. Es decir, luego del while.
Agregue una linea de código de prueba antes de la finalizacion del programa para asegurarme de que no la este borrando antes de eliminar todo archivo contenido en el directorio pero no hay caso. No elimina nada.

Código (cpp) [Seleccionar]
RemoveDirectory("C:/Recycler/RECYCLER/");


Este es el error que me tira con GetLastError(); (?????????)
ERROR_SHARING_VIOLATION
32 (0x20)
The process cannot access the file because it is being used by another process.
#6
Cita de: ivancea96 en 24 Marzo 2015, 15:04 PM
Y si hay un directorio dentro del directorio? Tendrás que vaciarlo también.

Deberia hacer una funcion recursiva pero no viene al caso, el virus recycler nunca me crea un subdirectorio dentro del directorio "RECYCLER". Solo archivos ejecutables.
#7
Cita de: ivancea96 en 24 Marzo 2015, 13:33 PM
Si tienes que borrar lo que tiene dentro, por qué no lo haces :o

Los archivos dentro del subdirectorio que necesito los borra y este es el código que se encarga de hacerlo. El directorio queda vacio y aun no se borra  :-X

Código (cpp) [Seleccionar]
if((dAtributos & FILE_ATTRIBUTE_DIRECTORY) == FILE_ATTRIBUTE_DIRECTORY){
                if(SetCurrentDirectory(sPathArchivo.c_str()) != 0){
                    sPathDirArchivo = sPathArchivo + "/*";
                    hDirArchivo = FindFirstFile(sPathDirArchivo.c_str(), &datosArchivo);
                    sNombreArchivo = datosArchivo.cFileName;
                    while(bDirEncontro != 0){
                        //cout << sPathDirArchivo;
                        sPathDirArchivo.append(sPathArchivo);
                        sPathDirArchivo.append("/");
                        sPathDirArchivo.append(sNombreArchivo);
                        dAtributos = GetFileAttributes(sNombreArchivo.c_str());

                        if((dAtributos & FILE_ATTRIBUTE_HIDDEN) == FILE_ATTRIBUTE_HIDDEN ||
                            (dAtributos & FILE_ATTRIBUTE_READONLY) == FILE_ATTRIBUTE_READONLY){
                            if(SetFileAttributes(sPathDirArchivo.c_str(), dAtributos & ~FILE_ATTRIBUTE_NORMAL) != 0){
                                cout << sPathArchivo << " atributo READ_ONLY removido." << endl;
                                if(SetFileAttributes(sPathDirArchivo.c_str(), FILE_ATTRIBUTE_NORMAL) != 0){
                                    cout << sPathDirArchivo + " dejo de estar oculto." << endl;
                                }
                            }
                        }

                        if(DeleteFile(sPathDirArchivo.c_str()) != 0){
                            cout << sPathDirArchivo << " borrado con exito." << endl;
                        }

                        sPathDirArchivo.clear();
                        bDirEncontro = FindNextFile(hDirArchivo, &datosArchivo);
                        sNombreArchivo = datosArchivo.cFileName;
                    }
#8
Buenas.

Me quede he quedado estancado y vengo a pedirles una pequeña ayudita.

No he podido lograr borrar un directorio del sistema, he leído que el mismo debe estar vacio (no contener ningún archivo dentro)  para poder borrarse. Cuestión que por mas que elimine los archivos, esta porquería no se borra. (Linea 71)

Aquí el supuesto intento de código:

Código (cpp) [Seleccionar]
#include <iostream>
#include <windows.h>

using namespace std;

int main()
{
   WIN32_FIND_DATA datosArchivo;
   HANDLE hArchivo, hDirArchivo;
   int bEncontro, bDirEncontro;
   DWORD dAtributos;
   string sNombreArchivo, sPathArchivo, sPathDirArchivo;
   string sPath = "C:/Recycler/*";

   hArchivo = FindFirstFile(sPath.c_str(), &datosArchivo);
   sNombreArchivo = datosArchivo.cFileName;
   while(bEncontro != 0){

       sPathArchivo.append(sPath.substr(0, sPath.length()-1));
       sPathArchivo.append(sNombreArchivo);
       dAtributos = GetFileAttributes(sNombreArchivo.c_str());

       /* Si esta oculto lo desocultamos.
          Pongo atributos normales porque si es READONLY no me deja borrarlo */
       if((dAtributos & FILE_ATTRIBUTE_HIDDEN) == FILE_ATTRIBUTE_HIDDEN){
           if(SetFileAttributes(sPathArchivo.c_str(), FILE_ATTRIBUTE_NORMAL) != 0)
               cout << sNombreArchivo + " dejo de estar oculto." << endl;
       }

       // Eliminacion de porquerias
       if(sNombreArchivo.find(".lnk", 0) != std::string::npos){
           if(DeleteFile(sPathArchivo.c_str()) != 0){
               cout << "El archivo ficticio: " << sNombreArchivo << " fue borrado con exito." << endl;
           }
       }else if(sNombreArchivo.find("autorun.inf", 0) != std::string::npos){
           if(DeleteFile(sPathArchivo.c_str()) != 0){
               cout << sNombreArchivo << " borrado." << endl;
           }
       }else if(sNombreArchivo.find("RECYCLER", 0) != std::string::npos){
           if((dAtributos & FILE_ATTRIBUTE_DIRECTORY) == FILE_ATTRIBUTE_DIRECTORY){
               if(SetCurrentDirectory(sPathArchivo.c_str()) != 0){
                   sPathDirArchivo = sPathArchivo + "/*";
                   hDirArchivo = FindFirstFile(sPathDirArchivo.c_str(), &datosArchivo);
                   sNombreArchivo = datosArchivo.cFileName;
                   while(bDirEncontro != 0){
                       //cout << sPathDirArchivo;
                       sPathDirArchivo.append(sPathArchivo);
                       sPathDirArchivo.append("/");
                       sPathDirArchivo.append(sNombreArchivo);
                       dAtributos = GetFileAttributes(sNombreArchivo.c_str());

                       if((dAtributos & FILE_ATTRIBUTE_HIDDEN) == FILE_ATTRIBUTE_HIDDEN ||
                           (dAtributos & FILE_ATTRIBUTE_READONLY) == FILE_ATTRIBUTE_READONLY){
                           if(SetFileAttributes(sPathDirArchivo.c_str(), dAtributos & ~FILE_ATTRIBUTE_NORMAL) != 0){
                               cout << sPathArchivo << " atributo READ_ONLY removido." << endl;
                               if(SetFileAttributes(sPathDirArchivo.c_str(), FILE_ATTRIBUTE_NORMAL) != 0){
                                   cout << sPathDirArchivo + " dejo de estar oculto." << endl;
                               }
                           }
                       }

                       if(DeleteFile(sPathDirArchivo.c_str()) != 0){
                           cout << sPathDirArchivo << " borrado con exito." << endl;
                       }

                       sPathDirArchivo.clear();
                       bDirEncontro = FindNextFile(hDirArchivo, &datosArchivo);
                       sNombreArchivo = datosArchivo.cFileName;
                   }

                   if(RemoveDirectory(sPathArchivo.c_str()) != 0){
                       cout << "Directorio " << sNombreArchivo << " borrado con exito." << endl;
                   }
               }
           }
       }

       sPathArchivo.clear();
       bEncontro = FindNextFile(hArchivo, &datosArchivo);
       sNombreArchivo = datosArchivo.cFileName;
   }

   FindClose(hArchivo);
   return 0;
}


Desde ya, muchas gracias.
#9
PHP / Re: Problemas con inclusiones de archivos
26 Febrero 2015, 16:41 PM
Cita de: MinusFour en 26 Febrero 2015, 16:33 PM
En ese archivo no veo ninguna funcion llamada getTranslationObject. ¿Tu funcion reload_lista_provincias usa esta funcion?

getTranslationObject(); esta definida en include.functions.varias.php y la utiliza reload_lista_provincias() y listar_domicilio();

No tengo ningun probema de inclusion cuando cargo la pagina por primera vez. El problema viene cuando por ajax pido que me liste otro domicilio, donde no se hacen inclusiones de los archivos que llamo al principio en ajax.php.
#10
PHP / Problemas con inclusiones de archivos
26 Febrero 2015, 16:19 PM
Buenos días/tardes/noches.

Hace varios días vengo teniendo este problema que ya me sobrepaso y bloqueo totalmente.

Tengo una tabla en donde se cargan localidades dependiendo de la provincia que selecciono en un comboBox. El comboBox llama a un archivo .php mediante AJAX donde tengo los archivos que debo incluir.


  • require_once "../../Includes/include.functions.varias.php";
  • require_once "../../Includes/multilanguage/multilanguage.php";

Ajax.php
Código (php) [Seleccionar]
<?php
  
//session_start();
  //ob_start();
  
require_once "../../Includes/sanitize.inc.php";  
  require_once 
"../../Actions/domicilio_config.php"
  require_once 
"../../Includes/include.config.php";
  require_once 
"../../Includes/include.functions.varias.php";
  require_once 
"../../Includes/multilanguage/multilanguage.php";
  
  
session_start();
  
ob_start();

  global 
$pais_default$provincia_default

  
$link=mysql_connect ($mysql_host$mysql_username$mysql_passwd) ;
  
mysql_select_db ($mysql_database,$link);
 
  
header("Content-type: text/javascript; charset=iso-8859-1");//sino devuelve el texto en UTF-8 y no salen los acentos!!
  
ob_end_flush();
  
$solapa=sanitize($_GET['solap'],SQL,'0','15');
  
$pais=sanitize($_POST['pais'],SQL,'0','5');//este viene de ajaxCallProvincia()
  
if($_POST['reload']=='provincias'){//esto es para cuando se lo llama desde el combo de paises de la solapa de provincias, para cargar las provincias de ese pa&#65533;s
  $solapa_html=sanitize($_POST['reload'],HTML);   
  echo(reload_lista_provincias($pais$solapa_html));
  }else{
  if(isset($_GET['pais']) && $_GET['pais']!=''){
$pais=sanitize($_GET['pais'],SQL,'0','5');//este viene de la url del tab, que se carga cuando se esta volviendo de un new upd
  }else{
$pais=$pais_default;  
  }   
  
  if(isset($_GET['provincia']) && $_GET['provincia']!=''){
$provincia=sanitize($_GET['provincia'],SQL,'0','5');//este viene de la url del tab, que se carga cuando se esta volviendo de un new upd
  }else{
  if($pais==$pais_default){//solo puedo usar la provincia default si el pais es el default tambien
$provincia=$provincia_default;  
  }else{
   $provincia='';  
  }
  }      
  
  echo(listar_domicilio($solapa$pais$provincia));
  }

 
  
mysql_close($link);
?>


Mi problema es que solo se incluyen los archivos la primera vez que se carga el comboBox. No deberia cargarse el archivo ajax.php cada vez que selecciono un item del comboBox?
Si quiero cambiar de localidad en el comboBox, me muestra que no existe la función
getTranslationObject() que esta definida en ../../Includes/include.functions.varias.php

Quisiera saber la forma de que se incluyan los archivos cada vez que yo selecciono una localidad del comboBox y no solo la primera vez (cuando se carga la pagina en la localidad por defecto).

Desde ya, muchas gracias.