Seleccionar varios archivos a la vez.

En la aplicación tengo un CommonDialog tipo ShowOpen, y uso las flags para poder utilizar el multiselect.
Esto funciona bien y me deja todos los ficheros seleccionados en el filename del CommonDialog.
El problema es que yo quiero volcar esos ficheros, contenidos en el filename, en un listbox. Y no encuentro la manera de hacerlo. Es decir, poner cada fichero como un elemento del listbox. Para luego procesar cada uno de los ficheros del listbox.

1 respuesta

Respuesta
1
Pon los nombres en un array y añádelos:
Dim sFiles() As String
sFiles = Split(CommonDialog1.FileName, " ")
sFiles(0)=directorio
sFiles(1)=1º fichero
sFiles(2)=2º fichero
Etc.
Y con AddItem los añades al listbox.
Parece que la solución sería la adecuada, sino fuera porque no me reconoce el Split como función. En la ayuda dice que únicamente se usa a partir de un DBGrid y no a partir del commondialog.filename, ni nada de nada.
No sé si habrá que agregar alguna referencia o algo. Tengo VB 5.0 sin posibilidad de migrar a VB 6.0.
Perdón por el retraso en contestar pero estuve de vacaciones :).
Public Function MiSplit(ByVal psStr As String, ByVal psSeparator As String, saTokens() As String) As Integer
Dim nTokens As Integer
Dim nOffset As Integer
If Left(psStr, Len(psSeparator)) = psSeparator Then
psStr = Right(psStr, Len(psStr) - Len(psSeparator))
End If
If Right(psStr, Len(psSeparator)) = psSeparator Then
psStr = Left(psStr, Len(psStr) - Len(psSeparator))
End If
nTokens = 0
If Trim(psStr) = "" Then
Exit Function
End If
Do
nOffset = InStr(psStr, psSeparator)
ReDim Preserve saTokens(0 To nTokens)
If nOffset > 0 Then
saTokens(nTokens) = Left(psStr, nOffset - 1)
psStr = Right(psStr, Len(psStr) - Len(psSeparator) - nOffset + 1)
Else
saTokens(nTokens) = psStr
psStr = ""
End If
nTokens = nTokens + 1
Loop While (Len(psStr) > 0)
MiSplit = nTokens
End Function
Muchas gracias por la función.
Según entiendo se ha de incluir el string (commondialog.filename), ¿el separador (?) Y el array en que guardar cada parte (cada fichero).
Es muy parecida a la que yo había intentado hacer, pero con la tuya tengo el mismo problema que con la mía. No sé cual es el carácter o variable o constante que determina la separación entre elementos dentro del contenido de commondialog.filename.
No funciona ni con "|", ni con VbKeySeparator, ni PathSeparator, ni tbrseparator. Intenté obtener el código ascii de dicho carácter, pero no tiene correspondencia con ninguno. Ya no sé como hacerlo HELPP ! :).
Muchas gracias por tu interés ;).
El separador es el espacio: " ". Los ficheros y los directorios vienen con nomenclatura 8.3 y nunca contienen espacios. No es una elección muy afortunada por parte de Microsoft pero ...
Siento mucho llevarte la contraria, pero la nomenclatura si que acepta los espacios en nombres de ficheros y carpetas. De hecho me funciona con la carpeta Mis documentos.
Pero después no reconoce el separador entre elementos de commondialog.filename como un espacio. Ya te dije que lo había intentado yo así y nada. Veremos como lo hacemos.
Si utilizo el espacio como separador hace lo siguiente.
Al posicionarnos, en tiempo de ejecución, sobre la variable aparece:
psStr = "C:\Mis documentos|fichero 1.txt|fichero 2.txt|fichero 3.txt"
Lo que guarda en el array es:
C:\Mis
documentos|fichero
1.txt|fichero
2.txt|fichero
3.txt
Pero lo que me muestra en un listbox es:
C:\Mis
Documentos
1.txt
2.txt
3.txt
Mira las anteriores contestaciones y verás que no sirve el filtro "|", ni una serie de constantes.
Muchas gracias por tu afán :).
Pues si lo que te devuelve es eso, el separador es el "|". Yo lo hice sin especificar long names y por eso me devolvía probablemente la cadena con espacios como separador.
Ya te digo que con ese carácter no funciona :(.
Dejémoslo aquí, muchas gracias por tu interés, seguiré pegándome con él hasta encontrar otra fórmula.
Un saludo

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas