archivos en redHola, tengo un script que abre un determinado archivo en una dirección de red.Cuando la computadora está conectada a esa red, todo está bien. Pero cuando la computadora está fuera de línea, me gustaría que la secuencia de comandos se detenga suavemente, en lugar de esperar y esperar antes de que comprenda que la dirección no está disponible. ¿Existe una función para comprobar rápidamente la disponibilidad de archivos remotos o, mejor aún, la disponibilidad de la conexión de red?
gracias
mateo
Re: Archivos en redHola Dave, lo probé pero aún toma muchos segundos si el recurso no está disponible.
gracias
mateo
Re: Archivos en redQuizás intente verificar la presencia del archivo usando El archivo existe antes de intentar abrirlo?
Re: Archivos en redintente hacer ping con el disco de red; ese es el ejemplo del medio. No puedo probarlo completamente sin pedirle a alguien que apague una unidad...
Re: Archivos en redGracias, voy a explorar esta posibilidad. En realidad, mi recurso es un archivo en un disco de red, por lo que ping no es exactamente el comando que debo usar, pero el concepto de llamar a un comando del sistema operativo es claro.
mateo
Re: Archivos en redeste script usa ping para obtener un eco de un servidor; el texto de ping puede ser un poco diferente en varios tipos de SO y la prueba de "Recibido = 1" puede necesitar ajustes. n=1 significa solo hacer ping una vez, w=100 significa no esperar más de 100 ms. La versión para Mac será diferente, esto (apenas) se ha probado en Windows.
Ping lleva el nombre del sonido que hacen los sonares submarinos... luego escucha el eco. Pero a diferencia de un eco real, son posibles otros retrasos con computadoras ocupadas. Su ping podría pasar fácilmente a través de cinco o más computadoras, y el eco será similar. Puedes jugar con ping en un "cuadro dos" como este:
Using ping in a "dos box"Usando ping en un "cuadro de dos"
isAvailable = Function( {resource},
{default local},
Contains( RunProgram( executable( "ping" ), options( {"-n 1 -w 100", resource} ), readfunction( "text" ) ), "Received = 1" ) != 0
);
// this succeeds in < .1 second
start = Tick Seconds();
jmp = isAvailable( "jmp.com" );
stop = Tick Seconds();
Show( jmp, stop - start );
// this fails in about 3 seconds
start = Tick Seconds();
fileserver = isAvailable( "jmpsserver" ); // leave out the back slashes and use the first name
stop = Tick Seconds();
Show( fileserver, stop - start );
// this fails in about .2 seconds
start = Tick Seconds();
nonesuch = isAvailable( "x" || Char( Random Integer( 1e15, 9e15 ) ) || ".com" );
stop = Tick Seconds();
Show( nonesuch, stop - start );
jmp = 1; -- jmp.com funciona
detener - iniciar = 0.0333333333255723;
servidor de archivos = 0; -- ese no es nuestro nombre de servidor de archivos
detener - iniciar = 2.26666666672099;
ninguno de esos = 0; -- no es probable que sea un nombre web real
detener - iniciar = 0.0500000000465661;
Re: Archivos en redbien, entonces es posible que desee usar un comando del sistema para verificar si la conexión de red está disponible y llamarla antes de ejecutar el resto del script. Aunque no estoy seguro de si eso duraría menos tiempo. Algunas ideas están escritas en el post que mencioné antes.
Re: Archivos en redgracias martin Sí, estoy usando "intentar", pero cuando no estoy conectado a la red, tarda unos 10 segundos antes de salir.
mateo
Re: Archivos en redpor ejemplo, similar al siguiente comando, esto arrojará un mensaje o número de excepción si falla. Luego puede hacer otra cosa (mensaje, archivo alternativo, ...). También puede encontrar otros consejos en este hilo: Can-JMP-call-a-DOS-Exe
a = Try( Open( networkpath ),0 )<BR />
Re: Archivos en redHola mateo,
has probado la función TRY y/o la función THORW. Pueden atrapar si no puede encontrar el archivo y saltar. No estoy seguro de si esto resuelve el problema que describiste, ya que probablemente también buscará la ruta. Sin embargo, vale la pena intentarlo si no lo has comprobado hasta ahora.
Martín