Foros del Web » Programación para mayores de 30 ;) » Programación General »

VB. Incapaz de trabajar con archivos

Estas en el tema de VB. Incapaz de trabajar con archivos en el foro de Programación General en Foros del Web. Hola otra vez, sigo líado, esta vez dos preguntas de este novato inútil para vosotros: 1) Tengo dos archivos ejecutables: c:\juan.exe y c:\pepe.exe. Quiero renombrar ...
  #1 (permalink)  
Antiguo 16/01/2003, 20:40
 
Fecha de Ingreso: febrero-2002
Mensajes: 25
Antigüedad: 22 años, 2 meses
Puntos: 0
VB. Incapaz de trabajar con archivos

Hola otra vez, sigo líado, esta vez dos preguntas de este novato inútil para vosotros:

1) Tengo dos archivos ejecutables: c:\juan.exe y c:\pepe.exe. Quiero renombrar el archivo c:\juan.exe a c:\pepe.exe.

Lo he probado con NAME pero sólo me permite renombrar un archivo si el nombre de archivo que toma no existe anteriormente, (como he dicho parto de que ambos archivos ya existen previamente). ¿Cómo puedo hacerlo?.

2) Quiero ejecutar una aplicación: ejemplo c:\aplicacion.exe desde un botón. ¿Qué código debo emplear?.

Si alguien me puede echar una mano se lo agradecería, gracias anticipadas.

Un saludo

Última edición por KaRPiN; 17/01/2003 a las 08:27
  #2 (permalink)  
Antiguo 17/01/2003, 09:43
 
Fecha de Ingreso: abril-2002
Mensajes: 438
Antigüedad: 22 años
Puntos: 2
Evidentemente no lo podrás renombrar y llamarlo como un archivo que ya existe. Así que haz un kill del archivo al cual quieres renombrar:
Kill "c:\pepe.exe"

Y luego ya renombras el otro a pepe.exe. Quizá también te convendría hacer antes un dir para ver si existe el archivo pepe.exe, sino te dará error el kill, es decir, quedaría algo así:

if len(dir("c:\pepe.exe")) then kill "c:\pepe.exe"

Y ya renombras el otro.

Respecto a lo segundo tienes dos posibilidades: la función shell o la API ShellExecute. Lo primero es más directo pero también ofrece menos posibilidades.

Saludos.
  #3 (permalink)  
Antiguo 17/01/2003, 16:03
 
Fecha de Ingreso: febrero-2002
Mensajes: 25
Antigüedad: 22 años, 2 meses
Puntos: 0
Bueno ... desde luego con la información algo he avanzado pero, no todo lo que yo quisiera, al menos al hacer el KILL como amablemente Sdnsdllm sugería ya puedo renombrar el archivo, pero no me llega.

Os comento mis problemillas:

1) Una vez hecho el KILL y ejecutado el NAME me encuentro con que me se ha borrado el archivo original que pretendía copiar. A ver si me explico: Necesito sobreescribir C:\2.txt con C:\1.txt, PERO además necesito no eliminar C:\1.txt.

2) Me gustaría que alguien me explicara un poco, si no es mucho pedir, para que vale este LEN en el código sugerido, (simple curiosidad es que pensaba que LEN se usaba para la indicar la longitud de una cadena y aquí no le veo sentido, ya véis que no doy una)

Código sugerido > if LEN(dir("c:\pepe.exe")) then kill "c:\pepe.exe"

3) Por último, es curioso pero cuando intento ejecutar un *.exe con SHELL como decía Sdnsdlm, en algunos exes no ocurre nada. Es decir en algunas aplicaciones funciona y en otras no, (me he cercierado de que las rutas son correctas y que los exes funcionan), os pongo el código que he empleado en uno de los casos en que el exe no me cargado:


Private Sub cmbEJECUTAR_Click()
Shell ("C:\Program Files\Microsoft Games\Age of Empires II\age2_x1\age2_x1.exe")
End Sub

Cuando hago click en el botón sale un reloj de arena una decima de segundo y nada más.

He ido a la ayuda de Visual y con SHELL ... salen unas opciones de poner un número, o un codígo, algo así > Shell("C:\WINDOWS\CALC.EXE", 1), pero lo cierto es que si pongo el número me dice que reguiere un igual ... además no se muy bien para que vale xD

He probado esto, porque me parecio que pudiera tener algo que ver, ingenuo de mi, lo de maximizado >> Shell ("C:\Program Files\Microsoft Games\Age of Empires II\age2_x1\age2_x1.exe", vbMaximizedFocus) ; pero nada... sigue pidiendo un igual que no se para que vale, igual que el vbmaximizefocus realmente, con lo cual conclusión estoy perdidísimo, si alguien puede hacer luz en el asunto se lo agradecería. ¿Porque no me funciona ese exe? , ¿qué debo hacer?

Un saludo a todos

Pd: lo más triste es que a un amigo que lo ha hecho en Delphi le va todo perfectamente, pero bueno me niego a usar Delphi es una cuestión de orgullo : ). gracias por leer este rollo.
  #4 (permalink)  
Antiguo 27/01/2003, 19:01
 
Fecha de Ingreso: enero-2003
Mensajes: 3
Antigüedad: 21 años, 3 meses
Puntos: 0
Espero que funcione

Para resolver tu problema de archivos trata esto:

cuando usas la opcion filecopy(source, destination) el no comprueba si va a ser sobreescrito el archivo entonces se cambia el contenido:

vba.filecopy("c:\1.txt", "c:\2.txt") lo de 1 queda en 2
por ultimo vba.kill("c:\1.txt")


para poder llamar con shell cualquier archivo exe simplemente hay que quitar los parentesis

Shell "C:\Program Files\Microsoft Games\Age of Empires II\age2_x1\age2_x1.exe", vbMaximizedFocus

y listo
  #5 (permalink)  
Antiguo 28/01/2003, 05:53
 
Fecha de Ingreso: abril-2002
Mensajes: 438
Antigüedad: 22 años
Puntos: 2
Hola,
Shell puedes usarlo "tipo" sub y "tipo" function. Por ponerte un ejemplo más sencillo, como el msgBox. Si lo pones así:
msgbox "hola que pasa colegas", simplemente muestra el texto y punto, si lo pones así:
res=msgbox ("hola que pasa colegas. Responde algo",vbQuestion+vbyesno)
Puedes coger el valor que te devuleve el msgBox y luego hacer un if con el res para saber que ha seleccionado el usuario. Pues bien, cuando usas la función Shell como "sub" (sin paréntesis) lo único que haces es ejecutar el exe, el bat o lo que le indiques, pero si le pones paréntesis te devuelve un long que identifica al proceso creado y que es totalmente necesario conocer para poder usar algunas APIS. Así que si le pones los paréntesis el programa espera que captures el valor de retorno de la función Shell en una variable, y de ahí que te diga que falta un igual, es decir, o usas
Shell "....."
o bien usas
dim res as long
res=Shell("....")

Así te rulará bien. Respecto a lo del len. Compruébalo tú mismo, es sumamente sencillo, primero comprueba que devuelve la función dir cuando existe y cuando no existe el fichero. Supongo que len la conoces bien (no hay problema por ahí). Y luego comprueba esto:

dim res as integer
res=0
if res then
msgbox "Entro1"
else
msgbox "Entro2"
end if
res=1
if res then
msgbox "Entro1"
else
msgbox "Entro2"
end if

Es decir, comprobarás que al igual que muchos otros lenguajes de programación, VB asocia el cero con false y cualquier otro valor entero que no sea cero con true. ASi que if len(dir(....)) then, hace:
dir---> cadena de texto
len --> longitud de la cadena
if len(dir(...)) ---> si la longitud es cero no entro ya que es como decir if 0 then (por tanto false), si la longitud no es cero, el fichero existe, len devuelve algo superior a cero y por tanto tienes algo del palo if 8 then (por ejemplo) y esto es siempr tratado como te he dicho antes como si fuera if true then y por tanto entro en el if.

Saludos.
  #6 (permalink)  
Antiguo 16/02/2003, 17:36
 
Fecha de Ingreso: febrero-2002
Mensajes: 25
Antigüedad: 22 años, 2 meses
Puntos: 0
ajá

Pués me ha quedado muy claro, gracias chicos.

Un saludo.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 19:57.