rutas dinamicas

HERTEZ
02 de Mayo del 2004
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

en?
02 de Mayo del 2004
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.

Jose oscar
02 de Mayo del 2004
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

en?
02 de Mayo del 2004
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.