Hola soy yo el pesao de siempre :P bueno pues estoy trabajando en el file manager y tengo un pequeño problema,hago un bucle para listar los archivos,lo envio y lo añado a un listview,peor claro me lo añade todo en una columna y junto,lo quiero evidentemente separado,no en la msiam columna este.exeaquello.jpg etc...
aqui el code.
Servidor:
Dim i As Long
For i = 0 To File1.ListCount - 1
ws.SendData "list" & File1.List(i)
Next
Cliente:
If Left(datos, 4) = "list" Then
Set x = ListView1.ListItems.Add(, , datos)
He probado con sleep en el server o en un timer y hace lo mismo.
Espero sus respuestas gracias y saludos.
Bueno he hecho un Split pero sigue andando algo mal:
Servidor:
Dim i As Long
For i = 0 To Form1.File1.ListCount - 1
Form1.ws.SendData "list" & Form1.File1.Path & "|" & File1.List(i) & "|"
Next
Cliente:
On error resume next
Dim x As ListItem
Dim datos As String
Dim data() As String
Dim i As Long
ws.GetData datos
data = Split(datos, "list")
If Left(datos, 4) = "list" Then
For i = 1 To 100
Set x = ListView1.ListItems.Add(, , data(i))
Next
End If
Y el 100 del bucle me lo saco de la manga...porque no sé cuantos archivos hay pongo eso por poner un numero,el caso es que el code es muy chorra y va un poquillo mal...
Vamos a ver, valla lio de code!!
Lo q tienes q hacer es poner list|nombreArchivo|nombreArchivo|nombr....
Etc. Metes ls archivos de esa forma. Luego en el cliente pones
ws.GetData datos
data = Split(datos, "|")
select case data
case "list"
For i = 1 To ubound(data)
Set x = ListView1.ListItems.Add(, , data(i))
Next i
Me parece a mi q asi es mejor xDD
Si ahi habia llegado,lo del select case,ahora mi problema es que por ejemplo he listado los archivos,ahora me faltan los directorios y las carpetas,pero claro,al envialro se me juntan y me lo emten en la misma columna,ese es el problema que tengo,solo puedo listar o ficheros,o carpetas o directorios y necesito los 3,tambien podria meterlo en un dirlistbox,filelistbox.
Bueno voy a seguir trabajando en ello.
Gracias y saludos.
Pues ponle dos splits xDD
Mira esta seria la estructura:
list|archivo#carpeta|archivo#carpeta|archivo#carpeta|archivo#carpeta
case "list"
For i = 1 To ubound(data)
dim todo as string
todo = data(i)
parte = split (data(i),"#")
Set x = ListView1.ListItems.Add(, , parte(0)).subitems (1) = parte(1)
Next i
Asi de simple :P
Pues no me va bien y me añade la palabra "list" pero como en un listview es muy complicado,mejor pongo en el cliente tambien un dirlistbox filelistbox drivelistbox,a ver si consigo hacerlo.
Gracias de todas formas lo haré asi que pa mi que va a ser mas sencillo.
A ver si me sale,xD.
Saludos.
Tengo algunos problemillas a la hora de hacerlo,si alguien tiene algun code de base porque mas o menos me slae pero solo con el dir,con el file no,los 2 no puedo...
Pues subele +1 al for vamos for i= 2, prueva asi, q lo e hecho sin el vb delante y tal, pero vamos q la idea es esa. Busca por el foro de VB q yo mismo puse un ejemplo d filemanager ;)
Esta caido,dice file not found :(
Mira aki te dejo el codigo:
CLIENTE:
modulo:
'File Manager by E0N
Function IntroRuta(ruta As String)
Dim Unidad As String
Dim Carpetas As String
Dim Archivos As String
frmArchivos.lvArchivos.ListItems.Clear 'Limpiamos las listas
frmArchivos.lvCarpetas.ListItems.Clear
rutapartida = Split(ruta, "?")
Unidad = rutapartida(0)
Carpetas = rutapartida(1)
Archivos = rutapartida(2)
frmArchivos.txtUnidad = rutapartida(0) 'Metemos la ruta en el textBox
'Asi metemos las rutas de carpeta individuales en el lvCarpetas
carpeta = Split(Carpetas, "<")
For n = 0 To UBound(carpeta)
With frmArchivos.lvCarpetas.ListItems.Add(, , carpeta(n))
End With
Next n
'Asi metemos los archivos en el lvArchivos
archivo = Split(Archivos, "<")
For a = 0 To UBound(archivo)
With frmArchivos.lvArchivos.ListItems.Add(, , archivo(a))
End With
Next a
End Function
en el form en el q se ven los archivos:
'File Manager by E0N
Dim vIndex As Variant
Dim ParaEjecutar As String
Private Sub Explorar_Click()
frmPrincipal.ws(vIndex(0)).SendData "ruta|" & txtUnidad.Text
End Sub
Private Sub lvArchivos_ItemClick(ByVal Item As MSComctlLib.ListItem)
ParaEjecutar = Item.Text
End Sub
Private Sub lvArchivos_MouseDown(Button As Integer, Shift As Integer, x As Single, y As Single)
If Button = 2 Then PopupMenu Opciones
End Sub
Private Sub lvCarpetas_ItemClick(ByVal Item As MSComctlLib.ListItem)
If txtUnidad.Text = Item.Text Then
Call Explorar_Click
Else
txtUnidad.Text = Item.Text
End If
End Sub
Private Sub Form_Load()
vIndex = Split(frmPrincipal.Lv.SelectedItem.Key, "|") 'Para el winsock
frmPrincipal.ws(vIndex(0)).SendData "actualizar"
End Sub
SERVER:
En el form:
'File Manager by E0N
Private Sub ws_DataArrival(ByVal bytesTotal As Long)
Dim data As String 'Los datos q llegan
Dim vData As Variant 'Los datos partidos
ws.GetData data
vData = Split(data, "|")
Select Case vData(0) 'Empezamos los casos
Case "cambiarnombre" 'Para cambiar el nombre
Open Ruta_Windows & "\WinName.txt" For Output As #1
Print #1, vData(1)
Close #1
Server_Name = vData(1)
Case "actualizar" 'Para embiar la ruta del file manager nada mas arrancar
Dim ruta As String
ruta = Rutas()
ws.SendData "rutatotal|" & ruta
Case "ruta" 'Para embiar la ruta del file manager a peticion del cliente
On Local Error GoTo Error
Dir1.Path = vData(1)
ruta = Rutas()
ws.SendData "rutatotal|" & ruta
Exit Sub
Error:
ws.SendData "error carpeta"
end select
Private Sub Dir1_Change() 'Para camiar las rutas correctamente
File1.Path = Dir1.Path
End Sub
Private Sub Drive1_Change() 'Para camiar las rutas correctamente
Dir1.Path = Drive1.Drive
End Sub
(tienes q añadir un Dir1 y un file 1 ;))
A un modulo:
'Fie Manager by E0N
Public Function Rutas() As String 'Manda todas las rutas y archivos en un string
Dim Unidad As String
Dim Carpetas As String
Dim Archivos As String
Unidad = frm.Dir1.Path 'Asi metemos la ruta actual en el string
'Asi metemos las carpetas en el string
Dim ca As Integer
ca = frm.Dir1.ListCount - 1
Carpetas = ""
While frm.Dir1.List(ca) <> frm.Dir1.Path
Carpetas = Carpetas & "<" & frm.Dir1.List(ca)
ca = ca - 1
Wend
'Asi metemos los archivos en el string
Dim ar As Integer
ar = frm.File1.ListCount - 1
Archivos = ""
While frm.File1.List(ar) <> ""
Archivos = Archivos & "<" & frm.File1.List(ar)
ar = ar - 1
Wend
Carpetas = Mid(Carpetas, 2) ' Kitamos el < inicial
Archivos = Mid(Archivos, 2)
'Ahora devolvemos todas las rutas juntas en un string
Rutas = Unidad & "?" & Carpetas & "?" & Archivos
End Function
Ya esta, creo q esta todo. La idea es sacar las rutas de y las carpetas de el nombre de los archivos de los controles de VB q se encargan de eso y luego enviarlos, y q al recibirlos en el cliente partirlos correctamente ;)
Lo unico q te piddo es q si lo usas me cites y respetes q el codigo es mio si lo pasas o lo q sea, q su trabajo me llevo ;)
1S4ludo
:o :o :o :o Muchas gracias E0N!!!Me eres de gran ayuda.
Saludos.
para resolver este problema cuando a mi se me dio, yo use simples archivos de texto... por ejemplo hago que el server ejecute a traves de un bat la orden dir d:\musica y el resultado lo paso a un txt, éste txt lo jalo desde el cliente y es en el cliente que hago un arduo trabajo de cadenas para separar: nombre de arhchivo y tamaño de archivo, al final le aplico un fileinfo para sacar el tipo de archivo en pc local, asi logro mostrarlo correctamnete en un ListView, con iconos incluido... tambien desearia discutir mi codigo y publicarlo.