Visual Basic - ARCHIVOS ABIERTOS

Life is soft - evento anual de software empresarial
   
Vista:

ARCHIVOS ABIERTOS

Publicado por Itziar (6 intervenciones) el 24/11/2010 17:48:05
Buenas tardes,
necesito saber como renombrar un archivo que esta iabierto, me explico, desde el cammondialog abro un archivo .dwg. Una vez que el usuario ha terminado de trabajar con dicho archivo necesito renombrarlo. Tengo el codigo para las dos cosas, el problema esque necesito saber cual es el codigo que me permite saber si el usuario ha cerrado el archivo para poder renombrarlo. Tal y como lo tengo puesto me abre el archivo y luego me lo renombra pero como esta abierto pues me da error.
¿alguien sabe como hacerlo??

Muchas gracias!!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:ARCHIVOS ABIERTOS

Publicado por pepe (20 intervenciones) el 25/11/2010 00:32:26
Si te refieres a saber cuando el usuario cierra el archivo dentro de tu programa, tú misma deberías saberlo, eres la que controla cuando se habre y cierra. No tienes más que renombrar el archivo despues de la rutina de cierre del archivo.

Si te refieres a un archivo abierto por un programa externo, por ejemplo un txt abierto con el notepad, prueva a realizar una apertura de escritura, si te deniega la apertura es que el archivo está habierto por otro programa.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:ARCHIVOS ABIERTOS

Publicado por itziar (6 intervenciones) el 25/11/2010 17:03:53
Lo que tengo abierto es un arcchivo de autocad y la prueba de escritura ya la hago, lo que no se es como hacerlo para que no me salga de comando hasta que cierre el archivo. Ahora lo que me pasa esque me devuelve que esta en uso pero me sale del proceso, necesito que se quede parado hasta que se cierre el archivo para despues renombrarlo. Adjunto el codigo que tengo puesto, no se , creo que me falta una especie de bucle....me he bloqueado...

Me.CommonDialog1.InitDir = "c:\proyectos"
Me.CommonDialog1.Filter = "Archivos acad|*.dwg"
Me.CommonDialog1.ShowOpen
strRutaCompleta = Trim$(Me.CommonDialog1.FileName)
strNombreArchivo = Trim$(Me.CommonDialog1.FileTitle)
'
strFecha = Format(Date, "YYYY-MM-DD")
'
'=========================
'1º abrir el archivo seleccionado
'========================
Call ShellExecute(Me.hwnd, "open", Trim$(strRutaCompleta), "", "", 1)
'
'=========================
' 2º saber si el se esta usando el archivo
'=========================
blnArchivoenUso = ArchivoEnUso(strRutaCompleta)

'========================================================
'Si no se esta usando renombrar, por el contrario esperar a que se cierre
'=========================================================
If blnArchivoenUso = False Then
'renombrar el archivo seleccionado
Name strRutaCompleta As Trim$("EXP001-10" & " " & strFecha & " " & strNombreArchivo)
Else
'esperar a que se cierre y renombrar
¿?????
End If
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:ARCHIVOS ABIERTOS

Publicado por pepe (20 intervenciones) el 26/11/2010 23:47:15
Bueno, la opcion basura sería:

do

blnArchivoenUso = ArchivoEnUso(strRutaCompleta)

loop while blnArchivoenUso = True

Name strRutaCompleta As Trim$("EXP001-10" & " " & strFecha & " " & strNombreArchivo)

Y digo la opcion basura, porque aún añadiendo un doevents dentro del do loop tendremos el programa bloqueando procesador.

La opcion elegante es añadir un timer con un lapso de 1s (o el tiempo que estimes necesario) y habilitarlo después de ejecutar ShellExecute. Dentro del evento del timer añadimos el resto del código que has puesto. De esta manera hacemos lo mismo que el bucle do loop que te he propuesto, pero con la diferencia que dicho bucle solo se ejecutará cada cierto tiempo, evitando bloquear el programa.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:ARCHIVOS ABIERTOS

Publicado por barba (3 intervenciones) el 05/01/2011 00:17:32
Un ejemplo simple que tengo a mano es la apertura de una base de datos...

' Abrir la base de datos *
Set BaseDeDatos = Workspaces(0).OpenDatabase(App.Path & "\BASE02.MDB")

, y terminado el manejo de los datos iniciales, inmediatamente cierro la base de datos...

BaseDeDatos.Close ' Cerrar la base de datos

, entonces ahora la puedo renombrar y puedo volver a abrirla con su nuevo nombre.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar