Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Temas relacionados > Redes
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 06-08-2011
jhonalone jhonalone is offline
Miembro
 
Registrado: sep 2007
Ubicación: Madrid
Posts: 549
Poder: 18
jhonalone Va por buen camino
Ruta/Dirección/Path en PC Remoto

Hola Compañeros! Agradecería vuestra ayuda.

A ver si sé explicarme.

Tengo una red doméstica entre mi PC sobremesa y el portátil.

Tengo un programa instalado en el PC sobremesa y lo quiero ejecutar desde el portátil. Bueno, hasta aquí no hay problema, he conseguido ejecutarlo.

Cuando uso ficheros que están en el directorio del programa, no tengo problemas en leerlos y grabarlos desde el portátil, como si estuviera en el de sobremesa, vamos.


El problema surge cuando tengo que usar un fichero con una path determinada en el PC sobremesa o cuando quiero utilizar GetCurrentDir, que me proporciona una dirección que luego me da error al utilizarla. P.e.: al buscar archivos del directorio actual me proporciona una dirección como la siguiente \
Responder Con Cita
  #2  
Antiguo 06-08-2011
jhonalone jhonalone is offline
Miembro
 
Registrado: sep 2007
Ubicación: Madrid
Posts: 549
Poder: 18
jhonalone Va por buen camino
No se qué pasó.

No se incorporó la mitad de mi post. Acabo de verlo ahora, disculpadme.

Justo después de las dos barras inversas "\\" se perdió TODO lo que había escrito. Vuelvo a escribir todo el mensaje.

Hola Compañeros! Agradecería vuestra ayuda.

A ver si sé explicarme.

Tengo una red doméstica entre mi PC sobremesa y el portátil.

Tengo un programa instalado en el PC sobremesa y lo quiero ejecutar desde el portátil. Bueno, hasta aquí no hay problema, he conseguido ejecutarlo.

Cuando uso ficheros que están en el directorio del programa, no tengo problemas en leerlos y grabarlos desde el programa ejecutado en el portátil, como si estuviera en el de sobremesa, vamos.

El problema surge cuando tengo que usar un fichero con una path determinada en el PC sobremesa o cuando quiero utilizar GetCurrentDir, que me proporciona una dirección que luego me da error al utilizarla. P.e.: al buscar archivos del directorio actual me proporciona una dirección como la siguiente "\ \ PC1\Dir1\fichero.ext" (Pongo las barras invertidas separadas, para que no me pase lo mismo. Esta es la path facilitada por GetCurrentDir)

"PC1" es el nombre asignado al PC de sobremesa, "Dir1" es el nombre asignado al directorio compartido, donde reside el ejecutable. "fichero.ext" es el nombre de cualquier fichero en el "Dir1"

Cuando intento utilizar la Path recibida para copiar un fichero, (dentro del mismo directorio compartido, pero con otro nombre) con el siguiente procedimiento, no realiza la acción.
Código Delphi [-]
procedure CopyFiles(Source, Dest: String);
var
  FileOpInfo: TShFileOpStruct;
begin
  FillChar(FileOpInfo, SizeOf(FileOpInfo), 0);
  FileOpInfo.wFunc := FO_COPY;
  FileOpInfo.pFrom := PChar(Source + #0);
  FileOpInfo.pTo := PChar(Dest);
  FileOpInfo.fFlags := FOF_NOCONFIRMMKDIR;
  ShFileOperation(FileOpInfo);
end;

El mismo problema se manifiesta en otra fase del programa, donde intento hacer una copia de seguridad a un subdirectorio, dentro del directorio donde está ubicado el ejecutable.

En un fichero tengo almacenada la dirección donde el usuario ha elegido hacer la copia de seguridad. (Puede ser en el mismo directorio y PC, como es el caso, o en otro PC de la red, que no lo he probado)

Bien, la dirección es del tipo: "C:\MiPrograma\CopySegu"

DirectoryExists("C:\MiPrograma\CopySegu") responde que no existe (aunque exista)

MKDir("C:\MiPrograma\CopySegu") da Error #21 (no sé qué significa, pero supongo que será que no encuentra la path)

Y aquí estoy. No sé como direccionar desde Delphi7 los ficheros que residen en un PC de la red.

CREO QUE ES OBVIO DECIR QUE TODO FUNCIONA PERFECTAMENTE SI NO ESTA EN RED.

Es la primera vez que voy a intentar utilizar un programa en red local y estoy bastante perdido.

Agradeceré cualquier sugerencia o ayuda.

Saludos.
Responder Con Cita
  #3  
Antiguo 07-08-2011
Avatar de Chris
[Chris] Chris is offline
Miembro Premium
 
Registrado: abr 2007
Ubicación: Jinotepe, Nicaragua
Posts: 1.678
Poder: 19
Chris Va por buen camino
Cita:
Empezado por jhonalone Ver Mensaje
[color=red]
Bien, la dirección es del tipo: "C:\MiPrograma\CopySegu"

DirectoryExists("C:\MiPrograma\CopySegu") responde que no existe (aunque exista)

MKDir("C:\MiPrograma\CopySegu") da Error #21 (no sé qué significa, pero supongo que será que no encuentra la path)
Primero, talvez "C:\MiPrograma\CopySegu" existe en la computadora de escritorio, pero no en la portatil. Así que este error siempre lo tendrás.

Con relación al Error # 21 tampoco sé que significa. Pero pueden ser dos cosas: 1) que la ruta "C:\MiPrograma\" no exista o 2) que la aplicación no tenga permisos para crear carpetas en la raiz C:\.

Cita:
Empezado por jhonalone Ver Mensaje
[color=red]
El problema surge cuando tengo que usar un fichero con una path determinada en el PC sobremesa o cuando quiero utilizar GetCurrentDir, que me proporciona una dirección que luego me da error al utilizarla. P.e.: al buscar archivos del directorio actual me proporciona una dirección como la siguiente "\ \ PC1\Dir1\fichero.ext"

"PC1" es el nombre asignado al PC de sobremesa, "Dir1" es el nombre asignado al directorio compartido, donde reside el ejecutable. "fichero.ext" es el nombre de cualquier fichero en el "Dir1"

Cuando intento utilizar la Path recibida para copiar un fichero, (dentro del mismo directorio compartido, pero con otro nombre) con el siguiente procedimiento, no realiza la acción.
Cuál es ese "otro nombre" que estás utilizando?

Por último, podrías detallar un poco más los errores que está generando la aplicación.

Saludos,
Chris
__________________
Perfil Github - @chrramirez - Delphi Blog - Blog Web
Responder Con Cita
  #4  
Antiguo 07-08-2011
jhonalone jhonalone is offline
Miembro
 
Registrado: sep 2007
Ubicación: Madrid
Posts: 549
Poder: 18
jhonalone Va por buen camino
Gracias Chris, por leerme y por querer ayudarme.

El "otro nombre" se refiere a que el mismo fichero (P.e: "fichero.txt" le duplico para hacer copia de seguridad con el nombre "fichero2.txt", pero en el mismo directorio del ejecutable.

No sé muy bien como funciona esto, ¿quieres decir que, aunque el programa ejecutable está en el PC de sobremesa, si yo le doy una ruta, la va a buscar en el portátil, desde el que ejecuto el programa?

Sin embargo, el resto de ficheros que no direcciono, sino dejo por defecto los está escribiendo corrrectamente en el PC de escritorio.

Y cuando le pido GetDir() o GetCurrentDir, me facilita una ruta con los datos de los nombres de la red, pero luego no puedo utilizarla para acceder a ellos, ni en el mismo directorio del ejecutable. Ya te dije que entiendo poco de esto, si puedes o conoces algún manual rápido de redes locales, te agradezco me lo indiques y así resolver las cuestiones, que pueden ser triviales si las conoces, pero insalvables si no las cononoces.

Gracias de todos modos. Chris.

Un saludo.
Responder Con Cita
  #5  
Antiguo 08-08-2011
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola jhonalone.

Supongamos que el equipo donde se encuentra el programa se llama DESKTOP y tu portátil NOTEBOOK. También supongamos que el programa se encuentra en la ubicacion: C:\MiPrograma.

Bién, ahora la ubicación que devuelva GetCurrentDir, es relativa al equipo que esté ejecutando la aplicación, por ejemplo la instrucción:
Código Delphi [-]
  ShowMessage(GetCurrentDir);
. Ejecutada desde DESKTOP mostrará: C:\MiPrograma
. Ejecutada desde NOTEBOOK mostrara: \\DESKTOP\MiPrograma

El problema es que si desde NOTEBOOK haces una una copia usando la cadena: 'C:\MiPrograma', estas haciendo referencia al disco C: de NOTEBOOK y no de DESKTOP.
No es una idea inteligente espejar los directorios para solapar el error, por que cuando pienses que estas copiando en DESKTOP lo harás en NOTEBOOK.

Para verificarlo, podés realizar una simple prueba: Una aplicación con un TButton y el siguiente código:
Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
begin
  if not CopyFile(PChar('C:\MiPrograma\Archivo.txt'), PChar('C:\MiPrograma\Archivo.bak'), True) then
    ShowMessage('ERROR. No se pudo realizar la copia');
end;

.Ejecutado desde DESKTOP, realiza la copia sin problemas.
.Ejecutado desde NOTEBOOK muestra el mensaje: 'ERROR. No se pudo realizar la copia'.

Eso sucede por que la aplicación no puede saber desde donde fué ejecutada.

Saludos.

Edito: Ya me olvidaba... : I/O Error 21: ERROR_NOT_READY (The device is not ready)
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 08-08-2011 a las 10:27:10. Razón: Agregar comentario
Responder Con Cita
  #6  
Antiguo 08-08-2011
jhonalone jhonalone is offline
Miembro
 
Registrado: sep 2007
Ubicación: Madrid
Posts: 549
Poder: 18
jhonalone Va por buen camino
Gracias, Ecfisa.
¡Qué grande eres y que bien te explicas!

No te he respondido antes porque he estado probando.
Si no he comprendido mal, cuando quiera referirme desde NOTEBOOK, a una dirección de DESKTOP, deberé sustituir, (siguiendo tu ejemplo) C:\MiPrograma por \\DESKTOP\MiPrograma

y siguiendo esta lógica, C:\Ejemplo\Primero\MiPrograma SE DEBERÍA CAMBIAR por \\ DESKTOP\Ejemplo\Primero\MiPrograma

¿y los problemas de direcciones en red se solucionarían de este modo?

Gracias por tu esfuerzo y por tu ayuda.

Saludos.
Responder Con Cita
  #7  
Antiguo 08-08-2011
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola jhonalone.

Cita:
¡Qué grande eres
Si quitás la lupa vas a ver que no es así...

Ahora fuera de bromas, lo que creo que al trabajar de ese modo, vas a tener que efectuar todas tus acciones desde la ubicación de la aplicación. Ya que es el único punto de referencia en común entre DESKTOP y NOTEBOOK.

Es decir que tu centro de operaciones debería ser:
Desde el equipo de escritorio (DESKTOP): C:\MiPrograma o ya sea, visto desde la laptop (NOTEBOOK): \\DESKTOP\MiPrograma


No estoy en red para probar el código siguiente, pero pienso que debería funcionar en ambos equipos.

Ubicándonos en DESKTOP, y suponiendo que tenemos: C:\MiPrograma\arch1.e1 y quisieramos guardar arch1.e1 en la carpeta C:\MiPrograma\Dir :

Código Delphi [-]
procedure CopiarArchivo(Origen, Destino: string; const Nombre: string);
begin
  Origen:= IncludeTrailingPathDelimiter(Origen)+Nombre;
  Destino:= IncludeTrailingPathDelimiter(Destino)+Nombre;
  if not CopyFile(PChar(Origen), PChar(Destino), True) then
    ShowMessage('Error al intentar copiar el archivo');
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  PtoPartida: string;
begin
  PtoPartida:= ExtractFilePath(Application.ExeName);
  CopiarArchivo(PtoPartida, PtoPartida+'Dir', 'arch1.e1'); // 'Dir' debe haber sido creado con anterioridad
end;
...
Pero como te dije arriba vas a tener que probarlo, no tengo manera de hacerlo ahora.

Un saludo.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 08-08-2011 a las 19:51:11. Razón: Agregar comentario
Responder Con Cita
  #8  
Antiguo 08-08-2011
jhonalone jhonalone is offline
Miembro
 
Registrado: sep 2007
Ubicación: Madrid
Posts: 549
Poder: 18
jhonalone Va por buen camino
Aun quitando la lupa, eres GRANDISIMO, Ecfisa.

Probaré lo que me mandas y te cuento.

Mientras tanto. Y si quieres entretenerte, te voy a proponer otra cuestión, que es para nota, (Bastante más complicada).
Si un usuario, elige como ruta de destino para los ficheros de copia de suguridad otro ordenador de la red, que no sea DESKTOP, sino otro portátil o sobremesa, conectado como NOTEBOOK2 o DESKTOP2, y esta dirección está grabada en un fichero, por ejemplo como "\\ DESKTOP2\Compartido", ¿Habría alguna posibilidad de averiguar, (desde DESKTOP), a qué dirección REAL corresponede y cómo puedo grabar las copias de seguridad en esta dirección, desde NOTEBOOK?.

Sé que es una pregunta muy complicada, (a lo mejor imposible de resolver), te pido que no gastes demasiado tiempo en resolverla si ves que es muy complicada.

Gracias por tu inestimable ayuda, Ecfisa.

Un saludo cordial.
Responder Con Cita
  #9  
Antiguo 08-08-2011
jhonalone jhonalone is offline
Miembro
 
Registrado: sep 2007
Ubicación: Madrid
Posts: 549
Poder: 18
jhonalone Va por buen camino
Ecfisa, he probado tu código y funciona perfectamente. (NO esperaba otra cosa)

Gracias.
Un saludo.
Responder Con Cita
  #10  
Antiguo 09-08-2011
Avatar de newtron
[newtron] newtron is offline
Membrillo Premium
 
Registrado: abr 2007
Ubicación: Motril, Granada
Posts: 3.591
Poder: 21
newtron Va camino a la fama
Este ecfisa ya empieza a caerme mal, ¿es que sabes todo de todo?
__________________
Be water my friend.
Responder Con Cita
  #11  
Antiguo 10-08-2011
jhonalone jhonalone is offline
Miembro
 
Registrado: sep 2007
Ubicación: Madrid
Posts: 549
Poder: 18
jhonalone Va por buen camino
Estaré fuera unos dias.
Pero no he olvidado el tema.
Lo digo por si tardo en responderos es por este motivo.
Saludos a todos.
Responder Con Cita
  #12  
Antiguo 16-10-2011
eroblesh eroblesh is offline
Miembro
 
Registrado: oct 2003
Ubicación: Mexico DF
Posts: 34
Poder: 0
eroblesh Va por buen camino
Cita:
Empezado por ecfisa Ver Mensaje
Hola jhonalone.
El problema es que si desde NOTEBOOK haces una una copia usando la cadena: 'C:\MiPrograma', estas haciendo referencia al disco C: de NOTEBOOK y no de DESKTOP.
No es una idea inteligente espejar los directorios para solapar el error, por que cuando pienses que estas copiando en DESKTOP lo harás en NOTEBOOK.

Para verificarlo, podés realizar una simple prueba: Una aplicación con un TButton y el siguiente código:
Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
begin
  if not CopyFile(PChar('C:\MiPrograma\Archivo.txt'), PChar('C:\MiPrograma\Archivo.bak'), True) then
    ShowMessage('ERROR. No se pudo realizar la copia');
end;

.Ejecutado desde DESKTOP, realiza la copia sin problemas.
.Ejecutado desde NOTEBOOK muestra el mensaje: 'ERROR. No se pudo realizar la copia'.

Eso sucede por que la aplicación no puede saber desde donde fué ejecutada.

Saludos.

Edito: Ya me olvidaba... : I/O Error 21: ERROR_NOT_READY (The device is not ready)
Que tal eficsa oya aca dando lata de nuevo veia este codigo para copiar un archivo desde mi red a mi pc pero no me esta funcionando el codigo es algo asi

Código Delphi [-]
procedure TForm1.btn2Click(Sender: TObject);
begin
 if not CopyFile(PChar('\\Teamkonetl\instalacionk\KONETL\KONETL.exe'), PChar('C:\konetl'), True) then
    ShowMessage('ERROR. No se pudo realizar la copia');
end;


siempre me regresa el error de que no se pudo copiar, me podrias comentar si algo esta mal? lo hago desde la linea de comandos y si lo ejecuta mm gracias salu2
Responder Con Cita
  #13  
Antiguo 16-10-2011
eroblesh eroblesh is offline
Miembro
 
Registrado: oct 2003
Ubicación: Mexico DF
Posts: 34
Poder: 0
eroblesh Va por buen camino
jejej ya logre que funcionara, pero ahora lo necesito integrara mi aplicacion pero cuando lo quiero ejecutar no me deja por que el programa esta en uso, me podrian recomendar algo??? gracias
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Path del recurso compartido remoto jaimeh Varios 1 21-05-2010 13:48:05
The path could no be found (no se encentra la ruta) Lucas_diaz1810 Conexión con bases de datos 4 20-09-2007 20:58:53
Obtener direccion , ruta completa de mi programa Peterman Varios 8 08-06-2007 13:25:13
Problemas con los Path marceloalegre Varios 4 29-04-2005 14:17:32
path de un alias carlomagno Conexión con bases de datos 1 28-04-2005 14:57:11


La franja horaria es GMT +2. Ahora son las 00:51:38.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi