• Domingo 28 de Abril de 2024, 12:19

Autor Tema:  Ayuda System(copy ) C++  (Leído 8428 veces)

kertxo

  • Miembro activo
  • **
  • Mensajes: 28
    • Ver Perfil
Re: Ayuda System(copy ) C++
« Respuesta #25 en: Jueves 14 de Junio de 2007, 13:38 »
0
Si, poniendo la ruta completa funciona, justo esta probando el GetModuleFileName
pero nose muy bien como va aber si consigo con esto hacerlo, lo unico que esta funcion devuelve el path del ejecutable no? despues abria que quitarle el nombre del ejecutable no?

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Ayuda System(copy ) C++
« Respuesta #26 en: Jueves 14 de Junio de 2007, 14:19 »
0
Cita de: "kertxo"
Si, poniendo la ruta completa funciona, justo esta probando el GetModuleFileName
pero nose muy bien como va aber si consigo con esto hacerlo, lo unico que esta funcion devuelve el path del ejecutable no? despues abria que quitarle el nombre del ejecutable no?
Si, con poner un 0 justo despues de la ultima \ tenes el path. Y para que te lo devuelva le pasas 0 como primer parametro.

Por cierto, tal vez haya alguna propiedad de ese control que controle el que cambie o no el directorio actual.

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

kertxo

  • Miembro activo
  • **
  • Mensajes: 28
    • Ver Perfil
Re: Ayuda System(copy ) C++
« Respuesta #27 en: Jueves 14 de Junio de 2007, 14:28 »
0
Lo siento me he liado.
GetModuleFileName devuelve una path completa: C:\.......\Project1.exe
incluyendo el nombre del .exe. Lo que deberia hacer es quitar el Project1.exe y eso ya nose como hacerlo.

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Ayuda System(copy ) C++
« Respuesta #28 en: Jueves 14 de Junio de 2007, 14:31 »
0
Cita de: "kertxo"
Lo siento me he liado.
GetModuleFileName devuelve una path completa: C:\.......\Project1.exe
incluyendo el nombre del .exe. Lo que deberia hacer es quitar el Project1.exe y eso ya nose como hacerlo.
Con poner un 0 justo despues de la ultima \ tenes el path.

Las cadenas esta delimitada por un cero que es el caracter de terminacion, reemplaza al caracter siguiente a la ultima \ con un 0.

Si tenes:
C:\\Dir1\\Dir2\\Ejecutable.exe Entonces usando un puntero al byte (char * en este caso) que contiene la E le das como nuevo valor 0.

Por cierto, tal vez haya alguna propiedad de ese control que controle el que cambie o no el directorio actual.

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

kertxo

  • Miembro activo
  • **
  • Mensajes: 28
    • Ver Perfil
Re: Ayuda System(copy ) C++
« Respuesta #29 en: Jueves 14 de Junio de 2007, 16:47 »
0
Ya me sale MUCHAS GRACIAS por tu ayuda en los agradcimientos t mencionare ati y al foro.
Lo unico k aorateng k pasar la ruta dond se han instalado los ficheros y nose, me casca al poner la variable. Esque esto de la rutas no lo domino demasiado.

El instalador a quedado asi:

if (RadioButton1->Checked==true)
    rutaansi="C:/Alumno/Alsa/";
  else
    if (DirectoryListBox1->Directory=="C:\\")
        rutaansi="C:\\Alsa\\";
      else
        rutaansi=DirectoryListBox1->Directory+"\\Alsa\\";

  const int p=64;//CABIARLA A LA LONGITUD DEFINITIVA
  char ruta[p];
  char drive[MAXDRIVE];
  char dir[61];
  int flags;

  GetModuleFileName(NULL,ruta,p);
  flags=fnsplit(ruta,drive,dir,NULL,NULL);

  string sdrive=drive;
  string sdir=dir;
  string rutaorigen=sdrive;
  rutaorigen+=sdir;

  string rutaovia=rutaorigen+"Viajes.dat";
  string rutaores=rutaorigen+"Reservas.dat";
  string rutaoaut=rutaorigen+"Autobuses.dat";
  string rutaoexe=rutaorigen+"Project1.exe";
  string rutaotxt=rutaorigen+"leeme.text";


  int x;
  x=mkdir(rutaansi.c_str());

  string rutadestvia=rutaansi.c_str();
  string rutadestres=rutaansi.c_str();
  string rutadestaut=rutaansi.c_str();
  string rutadestexe=rutaansi.c_str();
  string rutadesttxt=rutaansi.c_str();

  rutadestvia+="Viajes.dat";
  rutadestres+="Reservas.dat";
  rutadestaut+="Autobuses.dat";
  rutadestexe+="Project1.exe";
  rutadesttxt+="leeme.txt";

  CopyFile(rutaovia.c_str(),rutadestvia.c_str(),false);
  CopyFile(rutaores.c_str(),rutadestres.c_str(),false);
  CopyFile(rutaoaut.c_str(),rutadestaut.c_str(),false);
  CopyFile(rutaoexe.c_str(),rutadestexe.c_str(),false);
  CopyFile(rutaotxt.c_str(),rutadesttxt.c_str(),false);


y la lectura es asi:

void nucleo::guardaralficherores()
{
        ofstream ficherores ("C:\\Alsa\\Reservas.dat");
        mapreservas.guardar(ficherores);
}
void nucleo::leerdelficherores()
{
        ifstream ficherores ("C:\\Alsa\\Reservas.dat");
        mapreservas.leer(ficherores);

y nose como poner ay una variable (que tiene que ser global por estar en otro formulario)

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Ayuda System(copy ) C++
« Respuesta #30 en: Jueves 14 de Junio de 2007, 16:57 »
0
Cita de: "kertxo"
Ya me sale MUCHAS GRACIAS por tu ayuda en los agradcimientos t mencionare ati y al foro.
Lo unico k aorateng k pasar la ruta dond se han instalado los ficheros y nose, me casca al poner la variable. Esque esto de la rutas no lo domino demasiado.

De nadas  B)

Usa un tamaño mayor para los buffer que usen GetModuleFileName, MAX_PATH por lo menos e inicializalos a cero con ZeroMemory (o memset).

Si te sigue dando error depuralo y decinos exactamente en que linea da el error, sino es muy dificil ayudarte.

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

kertxo

  • Miembro activo
  • **
  • Mensajes: 28
    • Ver Perfil
Re: Ayuda System(copy ) C++
« Respuesta #31 en: Jueves 14 de Junio de 2007, 17:03 »
0
Si le pongo MAX_PATH me salen despues d la ruta muchos caracteres raros y no ejecuta bien, le doi 64 porque es la ruta donde esta ahora:
C:\Documents and Settings\Pilates\Escritorio\Nueva carpeta3\pro

Luego le dare menos porque estara en por ejemplo E:\ejcutable\

El error me lo de la en la linea de lectura del fichero
 
    ifstream ficherores ("C:\\Alsa\\Reservas.dat");

Porque nose como porner hay la ruta del donde se han instalado

  ifstream ficherores (variable donde se han instalado);

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Ayuda System(copy ) C++
« Respuesta #32 en: Jueves 14 de Junio de 2007, 18:23 »
0
Cita de: "kertxo"
Si le pongo MAX_PATH me salen despues d la ruta muchos caracteres raros y no ejecuta bien, le doi 64 porque es la ruta donde esta ahora: Luego le dare menos porque estara en por ejemplo E:\ejcutable\

Eso de 64 o menos no sirve, el ejecutable puede estar en cualquier lado. ¿Usaste ZeroMemory para inicializar todo a cero como te dije?

Cita de: "kertxo"
El error me lo de la en la linea de lectura del fichero
ifstream ficherores ("C:\\Alsa\\Reservas.dat");

¿Que error te da ahi? ¿No abre el archivo?

Cita de: "kertxo"
Porque nose como porner hay la ruta del donde se han instalado
ifstream ficherores (variable donde se han instalado);

¿No es rutaansi donde esta el directorio de instalacion?

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

kertxo

  • Miembro activo
  • **
  • Mensajes: 28
    • Ver Perfil
Re: Ayuda System(copy ) C++
« Respuesta #33 en: Jueves 14 de Junio de 2007, 18:41 »
0
Si esta en rutaansi, pero ruta ansi es una variable extern de tipo AnsiString
y lo k se le pasa a ifstream es un char *

y nose komo pasarlo pk la funcion .c_str() del Ansi no me sale al ponerlo.

Y en cuanto al memset l ohe probado pero no se usar esa funcion

De todas formas la ruta completa esta en rutadesvia, rutadestres y rutadesaut
para cada fichero
Son extern tb de tipo string y si compilo sin pasar nada a la funcion ifstream me da linker error en cada uno de ellos

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Ayuda System(copy ) C++
« Respuesta #34 en: Jueves 14 de Junio de 2007, 18:47 »
0
Cita de: "kertxo"
Si esta en rutaansi, pero ruta ansi es una variable extern de tipo AnsiString
y lo k se le pasa a ifstream es un char *

y nose komo pasarlo pk la funcion .c_str() del Ansi no me sale al ponerlo.

Y en cuanto al memset l ohe probado pero no se usar esa funcion
c_str existe en AnsiString, trata de compilarlo. Y memset se usa pasandole primero el puntero al buffer, despues el caracter (0 en este caso) y por ultimo la cantidad de veces que queremos que escriba ese caracter en este caso MAX_PATH.

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

kertxo

  • Miembro activo
  • **
  • Mensajes: 28
    • Ver Perfil
Re: Ayuda System(copy ) C++
« Respuesta #35 en: Jueves 14 de Junio de 2007, 18:51 »
0
De todas formas la ruta completa esta en rutadesvia, rutadestres y rutadesaut
para cada fichero
Son extern tb de tipo string y si compilo sin pasar nada a la funcion ifstream me da linker error en cada uno de ellos

kertxo

  • Miembro activo
  • **
  • Mensajes: 28
    • Ver Perfil
Re: Ayuda System(copy ) C++
« Respuesta #36 en: Jueves 14 de Junio de 2007, 19:22 »
0
He consegido que no me de linker error pero aora me dice
Project Project1.exe raised exception class EPrivilege with message"Privileged Instruction". Process stopped. Use Step or Run continue.

y lo tengo asi: el instalador:
TForm2 *Form2;
AnsiString rutaansi;         //////VARIABLES GLOBALES
string rutadestvia;
string rutadestres;
string rutadestaut;

y el resto del instalador igual y el nucleo que es de donde llamo a leer ficheros:

#include "nucleo.h"
#include <map>
#include <deque>
#include <string>
#include <string.h>

//---------------------------------------------------------------------------
extern string rutadestvia;
extern string rutadestres;
extern string rutadestaut;
contenedorreservas nucleo::mapreservas;
ContenedorAutobus nucleo::mapautobuses;
contenedorviajes nucleo::dequeviajes;
using namespace std;


void nucleo::guardaralficherores()
{
        char *r;
        strcpy(r,rutadestres.c_str());           ////FUNCION DE ESCRITURTA A FICHERO
        ofstream ficherores ®;
        mapreservas.guardar(ficherores);
}
void nucleo::leerdelficherores()
{
        char *r;
        strcpy(r,rutadestres.c_str());      //////////FUNCION DE LECTURA DE FICHERO
        ifstream ficherores ®;
        mapreservas.leer(ficherores);
}

Que puede ser???

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Ayuda System(copy ) C++
« Respuesta #37 en: Jueves 14 de Junio de 2007, 19:33 »
0
Eso NO tiene ningun sentido y por eso da una excepcion, si podes pasarle a strcpy rutadestres.c_str() tambien se la podes pasar a ofstream. Da una excepcion por usar un puntero no inicializado r (apunta a cualquier lado).

Esto tiene que funcionar:
ofstream ficherores(rutadestres.c_str());

A lo sumo necesitaras hacer un casting a char *.

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

kertxo

  • Miembro activo
  • **
  • Mensajes: 28
    • Ver Perfil
Re: Ayuda System(copy ) C++
« Respuesta #38 en: Jueves 14 de Junio de 2007, 19:55 »
0
Tenias razon, ahora si que lo coje pero calro lo coje solo si instalo el programa porque sino el contenido de la variable se destruye al salir del programa existe alguan forma de guardar las direcciones en algun sitio?

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Ayuda System(copy ) C++
« Respuesta #39 en: Jueves 14 de Junio de 2007, 20:36 »
0
Cita de: "kertxo"
Tenias razon, ahora si que lo coje pero calro lo coje solo si instalo el programa porque sino el contenido de la variable se destruye al salir del programa existe alguan forma de guardar las direcciones en algun sitio?
Si, podes usar archivos o el registro de Windows.

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

kertxo

  • Miembro activo
  • **
  • Mensajes: 28
    • Ver Perfil
Re: Ayuda System(copy ) C++
« Respuesta #40 en: Jueves 14 de Junio de 2007, 21:29 »
0
Que es eso del registro de windows???

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Ayuda System(copy ) C++
« Respuesta #41 en: Jueves 14 de Junio de 2007, 21:35 »
0

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

kertxo

  • Miembro activo
  • **
  • Mensajes: 28
    • Ver Perfil
Re: Ayuda System(copy ) C++
« Respuesta #42 en: Jueves 14 de Junio de 2007, 21:42 »
0
Pero como puedo escribir y leer de esos registros?

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Ayuda System(copy ) C++
« Respuesta #43 en: Jueves 14 de Junio de 2007, 22:14 »
0
Usando la API de Windows, si vas a usar el registro guarda un solo valor el del directorio de instalacion (despues le agregaras los nombres de los archivos a variables en tiempo de ejecucion).

Registry

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

kertxo

  • Miembro activo
  • **
  • Mensajes: 28
    • Ver Perfil
Re: Ayuda System(copy ) C++
« Respuesta #44 en: Jueves 14 de Junio de 2007, 22:32 »
0
Muchas Gracias aunque supongo que buscare otra solucion porque solo tengo hasta el domingo para acabarlo y no creo que consiga hacerlo y enterlo para entonces.

Es demasiado lioso para acerlo en tan poco tiempo

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Ayuda System(copy ) C++
« Respuesta #45 en: Jueves 14 de Junio de 2007, 22:50 »
0
Cita de: "kertxo"
Muchas Gracias aunque supongo que buscare otra solucion porque solo tengo hasta el domingo para acabarlo y no creo que consiga hacerlo y enterlo para entonces.

Es demasiado lioso para acerlo en tan poco tiempo
En realidad hacerlo es bastante simple pero aprender los conceptos lleva un tiempo, mejor usa un archivo (formato .INI, uno propio o el que quieras).

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

kertxo

  • Miembro activo
  • **
  • Mensajes: 28
    • Ver Perfil
Re: Ayuda System(copy ) C++
« Respuesta #46 en: Jueves 14 de Junio de 2007, 23:02 »
0
Ya esta he creado un archivo .dat de rutas en una carpeta temporal fija k sera siempre la misma y  me lo lee ala perfeccion ahora empezare a depurar lo que me dijiste del MAX_PATH aber que es lo que puedo hacer.
GRACIAS

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Ayuda System(copy ) C++
« Respuesta #47 en: Jueves 14 de Junio de 2007, 23:04 »
0
De nadas pero si ahora te funciona usando MAX_PATH y el memset no hace falta que depures nada.

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

kertxo

  • Miembro activo
  • **
  • Mensajes: 28
    • Ver Perfil
Re: Ayuda System(copy ) C++
« Respuesta #48 en: Jueves 14 de Junio de 2007, 23:14 »
0
Bueno, el programa esta acabado, pero ya se me ha ocurrido algo mas para hacer, voi a ponerle una barra de progreso para saber cuando ha acabado de copiar los archivos.
Siempre hay algo mas que se pueda hacer jejeje

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Ayuda System(copy ) C++
« Respuesta #49 en: Jueves 14 de Junio de 2007, 23:27 »
0
Cita de: "kertxo"
Bueno, el programa esta acabado, pero ya se me ha ocurrido algo mas para hacer, voi a ponerle una barra de progreso para saber cuando ha acabado de copiar los archivos.
Siempre hay algo mas que se pueda hacer jejeje
Je, si queres hacerlo bien (complicado) busca informacion sobre CopyFileEx  :P

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.