rutas dinamicas
hola antes que nada quiero agradecer a enço por su ayuda con mi problema anterior, ahora mi problema es que mi drilistbox, como menciones antes tiene que mostrar solo los archivos de cd, el codigo que me dio enço esta bien, pero estaran deacuerdo con migo en que no siempre se nombra igual a la unidad de cd, por eso tengo que hacer que sea dinamico, Como le hago?
de unvez graicas
de unvez graicas
Hola,
pués sÃ, estamos de acuerdo contigo en que no siempre tienen asignada la misma letra de unidad, y aún digo más, no siempre hay sólo una unidad de CD.
Asà que aquà te pongo un ejemplillo para ver como capturar las unidades que hay, de qué tipo són, y si están listas para lectura, entre otras cosas, utilizando para ello el objeto FileSystemObject.
Para utilizar el FileSystemObject, bastarÃa con crear directamente una referencia a él con la función CreateObject, pero esto tiene el inconveniente de que al pulsar el punto no te despliega la lista de propiedades y métodos, pero sÃ, si agregas la referencia en el proyecto, y asà podrás ver toda la información que podrás capturar.
Asà pués, debes ir al menú "Proyecto > Referencias...", y activar la referencia "Microsoft Scripting Runtime".
Para ver este ejemplo pon un Command1 y un ListBox llamado List1, y pega este código para el botón:
Private Sub Command1_Click()
Dim Fs As FileSystemObject, Unidades As Drives, Unidad As Drive
Dim Cont As Integer, Tipo As String
Set Fs = New FileSystemObject
Set Unidades = Fs.Drives
List1.Clear
For Each Unidad In Unidades
Select Case Unidad.DriveType
Case UnknownType: Tipo = "Desconocido"
Case Removable: Tipo = "Separable"
Case Fixed: Tipo = "Fijo"
Case Remote: Tipo = "Red"
Case CDRom: Tipo = "CD-ROM"
Case RamDisk: Tipo = "Disco RAM"
End Select
List1.AddItem Unidad.Path & ""
List1.AddItem " Tipo - " & Tipo
List1.AddItem " Preparado - " & Unidad.IsReady
Next
Set Unidad = Nothing
Set Unidades = Nothing
Set Fs = Nothing
End Sub
O sea, que para tu caso tendrás que poner algo como:
If Unidad.DriveType = CDRom And Unidad.IsReady Then Dir1.Path = Unidad.Path
Y como hay la posibilidad de que haya más de una unidad de CD, (una unidad de DVD también és de tipo CDRom), te sugiero que captures en un array las letras de unidad que correspondan a un CDRom, y que además estén listas, y comprobar en el Ubound(MatrizCDs) si sólo hay una asignársela, y si hay más de una... bueno tu verás... o mostrar una lista de las posibles, o lo que sea.
Saludos.
pués sÃ, estamos de acuerdo contigo en que no siempre tienen asignada la misma letra de unidad, y aún digo más, no siempre hay sólo una unidad de CD.
Asà que aquà te pongo un ejemplillo para ver como capturar las unidades que hay, de qué tipo són, y si están listas para lectura, entre otras cosas, utilizando para ello el objeto FileSystemObject.
Para utilizar el FileSystemObject, bastarÃa con crear directamente una referencia a él con la función CreateObject, pero esto tiene el inconveniente de que al pulsar el punto no te despliega la lista de propiedades y métodos, pero sÃ, si agregas la referencia en el proyecto, y asà podrás ver toda la información que podrás capturar.
Asà pués, debes ir al menú "Proyecto > Referencias...", y activar la referencia "Microsoft Scripting Runtime".
Para ver este ejemplo pon un Command1 y un ListBox llamado List1, y pega este código para el botón:
Private Sub Command1_Click()
Dim Fs As FileSystemObject, Unidades As Drives, Unidad As Drive
Dim Cont As Integer, Tipo As String
Set Fs = New FileSystemObject
Set Unidades = Fs.Drives
List1.Clear
For Each Unidad In Unidades
Select Case Unidad.DriveType
Case UnknownType: Tipo = "Desconocido"
Case Removable: Tipo = "Separable"
Case Fixed: Tipo = "Fijo"
Case Remote: Tipo = "Red"
Case CDRom: Tipo = "CD-ROM"
Case RamDisk: Tipo = "Disco RAM"
End Select
List1.AddItem Unidad.Path & ""
List1.AddItem " Tipo - " & Tipo
List1.AddItem " Preparado - " & Unidad.IsReady
Next
Set Unidad = Nothing
Set Unidades = Nothing
Set Fs = Nothing
End Sub
O sea, que para tu caso tendrás que poner algo como:
If Unidad.DriveType = CDRom And Unidad.IsReady Then Dir1.Path = Unidad.Path
Y como hay la posibilidad de que haya más de una unidad de CD, (una unidad de DVD también és de tipo CDRom), te sugiero que captures en un array las letras de unidad que correspondan a un CDRom, y que además estén listas, y comprobar en el Ubound(MatrizCDs) si sólo hay una asignársela, y si hay más de una... bueno tu verás... o mostrar una lista de las posibles, o lo que sea.
Saludos.
Capo!!!
Yo te pregunto Microsoft Scriting Runtine no es lo mismo que la referencia Scripting , pues yo agregue SCRIPTING y no logre sacar nada bueno de eso jajajja, es mas los metodos varian un poco respecto de los FileSystemScriptingObject, de este ultimo algo entiendo
Capo !!!!....Capo!!!!
Un saludo ENCO
Jose Oscar
Yo te pregunto Microsoft Scriting Runtine no es lo mismo que la referencia Scripting , pues yo agregue SCRIPTING y no logre sacar nada bueno de eso jajajja, es mas los metodos varian un poco respecto de los FileSystemScriptingObject, de este ultimo algo entiendo
Capo !!!!....Capo!!!!
Un saludo ENCO
Jose Oscar
saludos Jose Oscar, ya que lo preguntas te diré lo que sé
Yo te respondo, sà és lo mismo, aúnque tiene su diferencia ...huy! esto parece una paradoja contradictoria, pero no lo és, te explico:
el modelo de objetos del sistema FileSystemObject pertenece a la biblioteca de tipos Scripting, que contiene la ScrRun.dll, y para tener una referencia a ella tienes dos opciones que yo sepa:
1- la primera és crear una instancia al objeto FileSystemObject mediate la función CreateObject.
Dim Fs As Object (o también asÃ: Dim Fs ya que la siguiente instrucción convierte el Variant en Object)
Set Fs = CreateObject("Scripting.FileSystemObject")
2- la otra forma és declarando una variable del tipo FileSystemObject, siempre y cuándo tengas la referencia activada en el proyecto, o sea en Proyecto > Referencias.., (o de lo contrario en la declaración de tipo te dirá que "no se ha definido el tipo definido por el usuario", ...o algo parecido)
Dim Fs As FileSystemObject
Set Fs = New FileSystemObject
Pues ésta última manera sólo funciona en Visual Basic, en cambio la primera funciona además en VBScript
El problema de trabajarlo con la primera forma és que tendrás que echar mano de la documentación en más de una ocasión, ya que como sabes, al escribir Text1. automáticamente se despliegan sus propiedades y métodos, lo mismo que sucederá haciendo Fs. usando la 2ª forma, pero con la 1ª forma no salen.
Asà que haciéndolo de la 2ª forma no necesitas saberlos de memoria, ni al pié de la letra, ni escribirlos por completo, y además te aparecerá en la lista "Proyecto/Biblioteca" del "Examinador de Objetos", que de la otra forma no lo verÃas.
Pero fundamentalmente és lo mismo.
Una nota más:
utilizar el FileSystemObject en proyectos de Visual Basic és prescindible, ya que existen suficientes APIs como para realizar todas las tareas que éste permite, y asà no serÃa necesario tener que arrastrar con el proyecto empaquetado la scrrun y sus parásitas, aunque sólo sean algo menos de 200 kb. Pero a mà se me hace más cómodo, y ya que desde la versión 6 nos lo dejan utilizar... ...pués resulta menos código, y más intuitivo.
Bueno, hasta ahà és lo que sé, +mi humilde opinión.
Un saludo compañero.
Yo te respondo, sà és lo mismo, aúnque tiene su diferencia ...huy! esto parece una paradoja contradictoria, pero no lo és, te explico:
el modelo de objetos del sistema FileSystemObject pertenece a la biblioteca de tipos Scripting, que contiene la ScrRun.dll, y para tener una referencia a ella tienes dos opciones que yo sepa:
1- la primera és crear una instancia al objeto FileSystemObject mediate la función CreateObject.
Dim Fs As Object (o también asÃ: Dim Fs ya que la siguiente instrucción convierte el Variant en Object)
Set Fs = CreateObject("Scripting.FileSystemObject")
2- la otra forma és declarando una variable del tipo FileSystemObject, siempre y cuándo tengas la referencia activada en el proyecto, o sea en Proyecto > Referencias.., (o de lo contrario en la declaración de tipo te dirá que "no se ha definido el tipo definido por el usuario", ...o algo parecido)
Dim Fs As FileSystemObject
Set Fs = New FileSystemObject
Pues ésta última manera sólo funciona en Visual Basic, en cambio la primera funciona además en VBScript
El problema de trabajarlo con la primera forma és que tendrás que echar mano de la documentación en más de una ocasión, ya que como sabes, al escribir Text1. automáticamente se despliegan sus propiedades y métodos, lo mismo que sucederá haciendo Fs. usando la 2ª forma, pero con la 1ª forma no salen.
Asà que haciéndolo de la 2ª forma no necesitas saberlos de memoria, ni al pié de la letra, ni escribirlos por completo, y además te aparecerá en la lista "Proyecto/Biblioteca" del "Examinador de Objetos", que de la otra forma no lo verÃas.
Pero fundamentalmente és lo mismo.
Una nota más:
utilizar el FileSystemObject en proyectos de Visual Basic és prescindible, ya que existen suficientes APIs como para realizar todas las tareas que éste permite, y asà no serÃa necesario tener que arrastrar con el proyecto empaquetado la scrrun y sus parásitas, aunque sólo sean algo menos de 200 kb. Pero a mà se me hace más cómodo, y ya que desde la versión 6 nos lo dejan utilizar... ...pués resulta menos código, y más intuitivo.
Bueno, hasta ahà és lo que sé, +mi humilde opinión.
Un saludo compañero.
