Imports System.Management
Public Class FTPClient
Public Server As String
Public UserNameFTP As String
Public PasswordFTP As String
Public NodoPadre As String
Public NodoFiglio As String
Public Appoggio As List(Of String)
Public NodoPadreLocal As String
Public NodoFiglioLocal As String
''' <summary>
''' Funzione principale che avvia tutte le altre funzioni
''' </summary>
''' <param name="sender"></param>
''' <param name="e"></param>
''' <remarks></remarks>
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Call CaricaDati()
'Recupera l'elenco dettagliato dei file e cartella e salvali in un Array
'Dim ElencoDettagliFileFTP() As String
'ElencoDettagliFileFTP = ListaDettagliFileServer()
'Recupera l'elenco dei file e cartelle e salvali in un Array
'Dim ElencoFileServerFTP() As String
'ElencoFileServerFTP = ListaFileServer()
'Cancella File server TRUE = Cancellazione avvenuta ; FALSE = Errore nella Cancellazione
'Dim CancellaFileServerFTP As Boolean
'CancellaFileServerFTP = CancellaFileSelezionato("f.txt")
'Rinomina il File Selezionato TRUE = Rinominato File correttamente ; FALSE = Errore nel Rinominare il File
'Dim RinominaNomeFile As Boolean
'RinominaNomeFile = RinominaFile("f.txt", "Remo.txt")
'Elimina Cartella o Directory nel Server
'Dim EliminaCartella As Boolean
'EliminaCartella = EliminaDirectory("Nuova cartella/")
'Crea una Cartella o Directory sul Server
'Dim CreaCartellaFTP As Boolean
'CreaCartellaFTP = CreaUnaCartella("Nuova cartella/")
'Caricare in un ToolStripComboBox la Lista File o Directory del Server
'ListaFileCaricaToolStripComboBox()
'Funzione che restituisce l'esito della ricerca di un File o di una Cartella o Directory
'Dim EsitoRicerca As Boolean
'EsitoRicerca = VerificaEsistenzaFileFTP("Nuova cartella")
'Funzione che verifica il percorso
'Dim EsitoVerificaPercorso As Boolean
'EsitoVerificaPercorso = VerificaEsistenzaPercorso("1/2/3/4")
'Download File dal Server al Pc Locale
'Dim CartellaDownload As String = "c:\scan"
'Dim FileServer As String = "f.txt"
'DownloadFIle(FileServer, CartellaDownload)
'Eseguire i comandi principali
'CaricaDatiTreeView()
'CaricaTreeView()
'Carico gli hard disk e le cartelle del PC Locale
CaricaTreeViewFolderLocal()
End Sub
''' <summary>
''' Inserire i dati relativi alla connesione :
''' ex : Server = "ftp://ftp.dominio.it"
''' UsernameFTP = "Username"
''' PasswordFTP = "Password"
''' </summary>
''' <remarks></remarks>
Private Sub CaricaDati()
Server = "ftp://127.0.0.1"
UserNameFTP = "demo"
PasswordFTP = "demo"
Server = txtServer.Text
UserNameFTP = txtUsername.Text
PasswordFTP = txtPassword.Text
End Sub
''' <summary>
''' Invio File FTP utilizzando la libreria System.Net
''' <paramref name="File">Inserire il percorso e il nome del file ex: c:\documento.txt</paramref>
''' </summary>
''' <remarks></remarks>
Private Function InvioFileFTP_(ByVal File As String)
Try
'Estrapolo dal percorso il nome del file e l'estenzione
Dim FileName As String = System.IO.Path.GetFileName(File)
Dim up As New System.Net.WebClient
'Mi preparo le credenziali per fare il login username e password
up.Credentials = New System.Net.NetworkCredential(UserNameFTP, PasswordFTP)
'Mi collego all'indirizzo ftp , faccio il login, e poi faccio Upload del file
up.UploadFile(Server & "/" & FileName, File)
Return True
Catch ex As Exception
MsgBox(ex.Message, vbCritical, "ERRORE")
Return False
End Try
End Function
''' <summary>
''' Funzione che effettua il Download del File dal Server sul Pc Locale
''' </summary>
''' <param name="FileServer">Nome del file che si trova sul Server</param>
''' <param name="Destinazione">Nome della cartella dove verà salvato il file - Cartella Download</param>
''' <returns>TRUE = Download del File correttamente sul Pc ; FALSE = Errore nel Download del File</returns>
''' <remarks></remarks>
Private Function DownloadFIle(ByVal FileServer As String, ByVal Destinazione As String)
Try
Dim up As New System.Net.WebClient
'Mi preparo le credenziali per fare il login username e password
up.Credentials = New System.Net.NetworkCredential(UserNameFTP, PasswordFTP)
'Mi collego all'indirizzo ftp , faccio il login, e poi faccio Upload del file
up.DownloadFile(Server & "/" & FileServer, Destinazione & "\" & FileServer)
Return True
Catch ex As Exception
MsgBox(ex.Message, vbCritical, "ERRORE")
Return False
End Try
End Function
''' <summary>
''' Funzione di Invio File FTP utilizzando la libreria System.Net.FtpWebRequest e WebRequest
''' <paramref name="File">Inserire il percorso e il nome del file ex: c:\documento.txt</paramref>
''' </summary>
''' <remarks></remarks>
Private Function InvioFileFTP(ByVal File As String) As Boolean
Try
Dim FileName As String = System.IO.Path.GetFileName(File)
Dim clsRequest As System.Net.FtpWebRequest = _
DirectCast(System.Net.WebRequest.Create(Server & "/" & FileName), System.Net.FtpWebRequest)
'Esegue il Login
clsRequest.Credentials = New System.Net.NetworkCredential(UserNameFTP, PasswordFTP)
clsRequest.Method = System.Net.WebRequestMethods.Ftp.UploadFile
' Leggi file in Byte...
Dim bFile() As Byte = System.IO.File.ReadAllBytes(File)
' Carica file...
Dim clsStream As System.IO.Stream = _
clsRequest.GetRequestStream()
clsStream.Write(bFile, 0, bFile.Length)
clsStream.Close()
clsStream.Dispose()
Return True
Catch ex As Exception
MsgBox(ex.Message, vbCritical, "ERRORE")
Return False
End Try
End Function
''' <summary>
''' Funzione che avvia l'Upload sul server del file specificato nella variabile PercorsoFile
''' </summary>
''' <remarks></remarks>
Public Sub AvvioUploadServerFTP(ByVal PercorsoFile As String)
If InvioFileFTP(PercorsoFile) Then
MsgBox("Caricato correttamente il File : " & PercorsoFile, vbInformation, "OK")
End If
End Sub
''' <summary>
''' Recupera elenco dei File e Directory con i relativi dettagli
''' ex : drwxr-xr-x 1 root root 0 Jun 6 17:07 .
''' drwxr-xr-x 1 root root 0 Jun 6 17:07 ..
''' drwxr-xr-x 1 root root 0 Jun 6 17:07 Nuova cartella
''' -rw-r--r-- 1 root root 0 Jun 6 17:07 Nuovo Documento di testo.txt
''' </summary>
''' <remarks></remarks>
Private Function ListaDettagliFileServer() As String()
Dim ArrayDyrectoryDettagli As New List(Of String)
Try
' Preparo gli oggetti che comunicheranno con il server FTP
Dim request As System.Net.FtpWebRequest = DirectCast(System.Net.WebRequest.Create(Server), System.Net.FtpWebRequest)
request.Method = System.Net.WebRequestMethods.Ftp.ListDirectoryDetails
' Login FTP - credenziali
request.Credentials = New System.Net.NetworkCredential(UserNameFTP, PasswordFTP)
Dim response As System.Net.FtpWebResponse = DirectCast(request.GetResponse(), System.Net.FtpWebResponse)
Dim responseStream As System.IO.Stream = response.GetResponseStream()
Dim reader As New System.IO.StreamReader(responseStream)
'Dim prova As String = reader.ReadToEnd()
Dim linea As String = reader.ReadLine
While Not linea Is Nothing
ArrayDyrectoryDettagli.Add(linea)
Console.WriteLine(linea) 'Stampa ogni riga
linea = reader.ReadLine() 'Continua a leggere le righe fino a quando non hai finito
End While
'Spampa nella consol quanto è grande la lista
Console.WriteLine("Directory Lista Completa, stato {0}", response.StatusDescription)
reader.Close()
response.Close()
Return ArrayDyrectoryDettagli.ToArray
Catch ex As Exception
MsgBox(ex.Message, vbCritical, "ERRORE")
Return ArrayDyrectoryDettagli.ToArray
End Try
End Function
''' <summary>
''' Carica in ToolStripComboBox l'elenco di Dyrectory e File che si trovano sul server.
''' ex : Nuova Cartella/
''' Nuovo Documento di testo.txt
''' </summary>
''' <remarks></remarks>
Private Sub ListaFileCaricaToolStripComboBox()
Dim req As System.Net.FtpWebRequest = System.Net.FtpWebRequest.Create(Server)
req.Credentials = New System.Net.NetworkCredential(UserNameFTP, PasswordFTP)
req.Method = System.Net.WebRequestMethods.Ftp.ListDirectory
Dim ToolStripComboBox1 As New System.Windows.Forms.ToolStrip
ToolStripComboBox1.Items.Clear()
Dim sr As New IO.StreamReader(req.GetResponse().GetResponseStream())
Dim str As String = sr.ReadLine()
While Not str Is Nothing
ToolStripComboBox1.Items.Add(str)
str = sr.ReadLine() 'Continua a leggere le righe fino a quando non hai finito
End While
sr.Close()
sr.Dispose()
sr = Nothing
req = Nothing
End Sub
''' <summary>
''' Recupera elenco dei File e Directory con i relativi dettagli
''' ex : Nuova cartella/
''' Nuovo Documento di testo.txt
''' </summary>
''' <param name="Patch">Inserire il nome della Cartella da dove estrapolare il contenuto dei file e cartella per poi caricare la lista </param>
''' <remarks></remarks>
Private Function ListaFileServer(Optional ByVal Patch As String = Nothing) As String()
Dim ArrayDyrectory As New List(Of String)
Try
' Get the object used to communicate with the server.
Dim request As System.Net.FtpWebRequest = DirectCast(System.Net.WebRequest.Create(Server & "/" & Patch), System.Net.FtpWebRequest)
request.Method = System.Net.WebRequestMethods.Ftp.ListDirectory
' This example assumes the FTP site uses anonymous logon.
request.Credentials = New System.Net.NetworkCredential(UserNameFTP, PasswordFTP)
Dim response As System.Net.FtpWebResponse = DirectCast(request.GetResponse(), System.Net.FtpWebResponse)
Dim responseStream As System.IO.Stream = response.GetResponseStream()
Dim reader As New System.IO.StreamReader(responseStream)
Dim Linea As String = reader.ReadLine
While Not Linea Is Nothing
ArrayDyrectory.Add(Linea)
Console.WriteLine(Linea) 'Stampa ogni riga
Linea = reader.ReadLine() 'Continua a leggere le righe fino a quando non hai finito
End While
'Console.WriteLine(prova)
'Console.WriteLine("Directory Lista Completa, stato {0}", response.StatusDescription)
reader.Close()
response.Close()
Return ArrayDyrectory.ToArray
Catch ex As Exception
'MsgBox(ex.Message, vbCritical, "ERRORE")
Return ArrayDyrectory.ToArray
End Try
End Function
''' <summary>
''' Funzione che permette di Cancellare il File sul Server
''' ex: CancellaFileSelezionato("Nuovo Documento di testo.txt")
''' </summary>
''' <param name="NomeFileSelezionato">Inserire il Nome del File da Cancellare</param>
''' <returns>TRUE = File Cancellato con sucesso ; FALSE = Errore Cancellazione</returns>
''' <remarks></remarks>
Private Function CancellaFileSelezionato(ByVal NomeFileSelezionato As String) As Boolean
Try
'Cancella File Selezionato dal Server
Console.WriteLine("Cancellazione File sul Server")
'Puntamento del File sul Server
Dim FTPDelReq As System.Net.FtpWebRequest = System.Net.WebRequest.Create(Server & "/" & NomeFileSelezionato)
'Effettuare login credensiali
FTPDelReq.Credentials = New Net.NetworkCredential(UserNameFTP, PasswordFTP)
'Richiamare il comando FTP DELE
FTPDelReq.Method = System.Net.WebRequestMethods.Ftp.DeleteFile
'Aspettare la risposta
Dim FTPDelResp As System.Net.FtpWebResponse = FTPDelReq.GetResponse
Return True
Catch ex As Exception
MsgBox(ex.Message, vbCritical, "ERRORE")
Return False
End Try
End Function
''' <summary>
''' Funzione che Rinomina il File Passato con un Nuovo nome File
''' </summary>
''' <param name="NomeFileSelezionato">Nome File da rinominare</param>
''' <param name="NewNomeFile">Nuovo nome del file</param>
''' <returns>TRUE = Rinominato File correttamente ; FALSE = Errore nel rinominare file</returns>
''' <remarks></remarks>
Private Function RinominaFile(ByVal NomeFileSelezionato As String, ByVal NewNomeFile As String) As Boolean
Try
'ftp comunicazione con il server
Dim FtpRequest As System.Net.FtpWebRequest = System.Net.WebRequest.Create(Server & "/" & NomeFileSelezionato)
FtpRequest.Credentials = New System.Net.NetworkCredential(UserNameFTP, PasswordFTP)
'ftp comando FTP RENAME
FtpRequest.Method = System.Net.WebRequestMethods.Ftp.Rename
'ftp rename file
FtpRequest.RenameTo = "/" & NewNomeFile
'ftp response per chiudere l'operazione
Dim FtpResponse As System.Net.FtpWebResponse = FtpRequest.GetResponse
FtpResponse = CType(FtpRequest.GetResponse(), System.Net.FtpWebResponse)
Return True
Catch ex As Exception
MsgBox(ex.Message, vbCritical, "ERRORE")
Return False
End Try
End Function
''' <summary>
''' Elimina Directory o Cartella nel Server
''' ex : EliminaDirectory("Nuova cartella")
''' EliminaDirectory("Nuova cartella/")
''' </summary>
''' <param name="NomeCartella">Inserire il nome della Directory o Cartella da eliminare</param>
''' <returns>TRUE = Eliminazione Cartella o Directory ; FALSE = Errore nel eliminare Cartella o Directory</returns>
''' <remarks></remarks>
Private Function EliminaDirectory(ByVal NomeCartella As String) As Boolean
Try
'Cancella File Selezionato dal Server
Console.WriteLine("Cancellazione Cartella = " & NomeCartella & " sul Server")
'Puntamento del File sul Server
Dim FTPDelReq As System.Net.FtpWebRequest = System.Net.WebRequest.Create(Server & "/" & NomeCartella)
'Effettuare login credensiali
FTPDelReq.Credentials = New Net.NetworkCredential(UserNameFTP, PasswordFTP)
'Richiamare il comando FTP RMD
FTPDelReq.Method = System.Net.WebRequestMethods.Ftp.RemoveDirectory
'Aspettare la risposta
Dim FTPDelResp As System.Net.FtpWebResponse = FTPDelReq.GetResponse
Return True
Catch ex As Exception
MsgBox(ex.Message, vbCritical, "ERRORE")
Return False
End Try
End Function
''' <summary>
''' Funzione che Crea una Cartella o Directory nel server
''' ex : CreaUnaCartella("Test")
''' CreaUnaCartella("Test/")
''' </summary>
''' <param name="NomeCartella">Inserire il nome della cartella da creare</param>
''' <returns>TRUE = Cartella creata con sucesso ; FALSE = Errore creazione cartella, cartella già esistente</returns>
''' <remarks></remarks>
Private Function CreaUnaCartella(ByVal NomeCartella As String) As Boolean
Try
'Cancella File Selezionato dal Server
Console.WriteLine("Creazione Cartella = " & NomeCartella & " sul Server")
'Puntamento del File sul Server
Dim FTPDelReq As System.Net.FtpWebRequest = System.Net.WebRequest.Create(Server & "/" & NomeCartella)
'Effettuare login credensiali
FTPDelReq.Credentials = New Net.NetworkCredential(UserNameFTP, PasswordFTP)
'Richiamare il comando FTP MKD
FTPDelReq.Method = System.Net.WebRequestMethods.Ftp.MakeDirectory
'Aspettare la risposta
Dim FTPDelResp As System.Net.FtpWebResponse = FTPDelReq.GetResponse
Return True
Catch ex As Exception
MsgBox(ex.Message, vbCritical, "ERRORE")
Return False
End Try
End Function
''' <summary>
''' Verifica Esistenza di un File o di una Directory nel Server
''' </summary>
''' <param name="NomeFile">Inserisci il Nome del File o Directory da cercare</param>
''' <param name="Patch">Inserisci il Nome della Cartella o Directory dove sottoporre la ricerca, si intende la root della ricerca</param>
''' <returns>TRUE = E' presente il file nel server ; FALSE = Non è presente il file nel server</returns>
''' <remarks></remarks>
Private Function VerificaEsistenzaFileFTP(ByVal NomeFile As String, Optional ByVal Patch As String = Nothing) As Boolean
Try
'Funzione che carica la Lista dei File e Cartelle del server
Dim ArrayFileServer() As String
ArrayFileServer = ListaFileServer(Patch & "/")
'Verifico che non ci sia solo una cartella
If ArrayFileServer.Length > 1 Then
'Pulisco l'Array dal Patch & "/"
For i As Integer = 0 To ArrayFileServer.Length - 1
ArrayFileServer(i) = ArrayFileServer(i).Replace(Patch & "/", "")
Next i
'Cerco nell'Array il file o cartella da cercare
For i As Integer = 0 To ArrayFileServer.Length - 1
If ArrayFileServer(i).ToString = NomeFile Then
Return True
End If
Next i
'Se non è presente il file o cartella nel serer
Return False
Else
'Verifico se l'array è vuoto
If ArrayFileServer.Length <> 0 Then
'Verifico che la cartella o il file è presente
If ArrayFileServer(0).ToString = NomeFile Or ArrayFileServer(0).ToString = NomeFile & "/" Then
Return True
End If
End If
'Se l'array è vuoto oppure non è c'è il file o cartella nel server
Return False
End If
Catch ex As Exception
MsgBox(ex.Message, vbCritical, "ERRORE")
Return False
End Try
End Function
Private Sub Disconnetti()
Dim i As Integer = 0
Do While i < ViewFolderServer.Nodes.Count
ViewFolderServer.Nodes.Item(i).Remove()
Loop
End Sub
Private Function VerificaEsistenzaPercorso(ByVal NomePercorso As String, Optional ByVal Path As String = Nothing) As Boolean
Try
Dim ArrayPercorso() As String = NomePercorso.Split("/".ToArray, StringSplitOptions.RemoveEmptyEntries)
Dim EsitoRicerca As Boolean
If Path Is Nothing Then
Path = ""
End If
For i As Integer = 0 To ArrayPercorso.Length - 1
EsitoRicerca = VerificaEsistenzaFileFTP(ArrayPercorso(i).ToString, Path)
If EsitoRicerca = True Then
Path = Path & "/" & ArrayPercorso(i).ToString
End If
Next
Return EsitoRicerca
Catch ex As Exception
MsgBox(ex.Message, vbCritical, "ERRORE")
Return False
End Try
End Function
Private Function Presente(ByVal Valore As String, ByVal x As TreeNode) As Boolean
Try
Dim val As String
If (x.Nodes.Count <> 0) Then
For i As Integer = 0 To x.Nodes.Count - 1
val = x.Nodes.Item(i).Text
If val = Valore Then
Return True
End If
Next
End If
Return False
Catch ex As Exception
Return False
End Try
End Function
''' <summary>
''' EliminaNodo passato il nodo elimina tutta la radice
''' </summary>
''' <param name="x">Passo il nodo da eliminare</param>
''' <remarks></remarks>
Private Sub EliminaNodo(ByVal x As TreeNode)
If x.Nodes.Count <> 0 Then
Dim i As Integer = 0
Do While (i < x.Nodes.Count)
x.Nodes.Item(i).Remove()
Loop
End If
End Sub
''' <summary>
''' PulisciArray serve per pulire la stringa dagli spazzi bianchi
''' </summary>
''' <param name="StringaDaPulire">La stringa da pulire </param>
''' <returns></returns>
''' <remarks></remarks>
Private Function PulisciArray(ByVal StringaDaPulire As String) As String
Dim ArrayTemp() As String
PulisciArray = ""
ArrayTemp = StringaDaPulire.Split("/".ToArray, StringSplitOptions.RemoveEmptyEntries)
If ArrayTemp.Length = 0 Then
Return PulisciArray
End If
PulisciArray = ArrayTemp(ArrayTemp.Length - 1)
Return PulisciArray
End Function
''' <summary>
''' CaricaDatiTreView è un modo da codice per caricare le immagini di un TreeView
''' </summary>
''' <remarks></remarks>
Private Sub CaricaDatiTreeView()
' Carico la lista delle immagini da utilizzare nel TreeView
Dim myImageList As New ImageList()
myImageList.Images.Add(Image.FromFile("GIF\1.png"))
myImageList.Images.Add(Image.FromFile("GIF\2.png"))
myImageList.Images.Add(Image.FromFile("GIF\3.png"))
' Assegna ImageList alla TreeView.
ViewFolderServer.ImageList = myImageList
' Seleziona TreeView immagini di default
ViewFolderServer.ImageIndex = 0
ViewFolderServer.SelectedImageIndex = 0
End Sub
''' <summary>
''' CaricaTreeView è la funzione che permette di caricare le cartelle salvate nel server FTP
''' è una funzione importantissima
''' </summary>
''' <remarks></remarks>
Private Sub CaricaTreeView()
'Carico Lista del Server
Dim ArrayListaFTP() As String = FiltraArrayDirectory()
'Carica i nodi Root delle Directory
For i As Integer = 0 To ArrayListaFTP.Length - 1
ViewFolderServer.Nodes.Add(ArrayListaFTP(i).ToString)
Next
End Sub
''' <summary>
''' Funzione che serve a filtrare le Cartelle dall'elenco dei File del Server
''' </summary>
''' <param name="Patch">La cartella del server da Analizzare ed estrarre i percorsi Folder</param>
''' <returns></returns>
''' <remarks></remarks>
Private Function FiltraArrayDirectory(Optional ByVal Patch As String = Nothing) As String()
Dim ArrayDirectory As New List(Of String)
Try
If Patch Is Nothing Then
Patch = ""
End If
Dim ArrayLista() As String = ListaFileServer(Patch)
'Ciclo dell'ArrayLista che contiene i percorsi delle cartelle e file
For i As Integer = 0 To ArrayLista.Length - 1
'Verifica che alla fine ci sia lo "/" che indica che è una cartella e non è un file
If ArrayLista(i).Contains("/") Then
ArrayDirectory.Add(ArrayLista(i).ToString)
End If
Next
Return ArrayDirectory.ToArray
Catch ex As Exception
ArrayDirectory.Add("Errore")
Return ArrayDirectory.ToArray
End Try
End Function
''' <summary>
''' EsempioNodo CArica un Nodo di tipo Pippo e i suoi Figlio di Pippo e Nipote di Pippo
''' </summary>
''' <returns></returns>
''' <remarks></remarks>
Private Function EsempioNodo()
'Generazione dei nodiRoot - nodoFiglio - nodoNipote
Dim nodoRoot As TreeNode
Dim nodoFiglio As TreeNode
Dim nodoNipote As TreeNode
nodoRoot = New TreeNode
nodoRoot.Text = "Pippo"
nodoFiglio = New TreeNode
nodoFiglio.Text = "Figlio di Pippo"
nodoNipote = New TreeNode
nodoNipote.Text = "Nipote di Pippo"
nodoNipote.ImageIndex = 1
nodoNipote.SelectedImageIndex = 1
nodoRoot.Nodes.Add(nodoFiglio)
nodoFiglio.Nodes.Add(nodoNipote)
ViewFolderServer.Nodes.Add(nodoRoot)
Return True
End Function
''' <summary>
''' Bottone di Connessione e caricamento del contenuto del server nel ViewFolderServer
''' </summary>
''' <param name="sender"></param>
''' <param name="e"></param>
''' <remarks></remarks>
Private Sub btnConnessione_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnConnessione.Click
If txtServer.Text <> "" Then
'Se è presente la parola ftp:// la sostituisce con il niente
If txtServer.Text.Contains("ftp://") = False Then
'Aggiungo la parola ftp://
txtServer.Text = "ftp://" & txtServer.Text
End If
If btnConnessione.Text = "Connessione Rapida" Then
CaricaTreeView()
btnConnessione.Text = "Disconnetti Rapida"
Else
btnConnessione.Text = "Connessione Rapida"
Disconnetti()
End If
Else
MsgBox("Errore il campo Server è vuoto. Ex : ftp.dominio.it.", vbCritical, "Errore Campo Vuoto Server")
End If
End Sub
Private Sub ViewFolderServer_NodeMouseClick(ByVal sender As Object, ByVal e As System.Windows.Forms.TreeNodeMouseClickEventArgs) Handles ViewFolderServer.NodeMouseClick
Try
'Pulisco tutto
EliminaNodo(e.Node)
'Carico Lista del Server
Dim ArrayListaFTP() As String = New String() {}
ArrayListaFTP = FiltraArrayDirectory(e.Node.FullPath.ToString() & "/")
Dim X As TreeNode
X = e.Node
X.ImageIndex = 0
X.SelectedImageIndex = 1
'Console.WriteLine(ArrayListaFTP.Length)
If ArrayListaFTP.Length <> 0 Then
'PresenteArrayNodo(ArrayListaFTP, e.Node)
For i As Integer = 0 To ArrayListaFTP.Length - 1
If (Presente(ArrayListaFTP(i).ToString, e.Node) = False) Then
X.Nodes.Add(ArrayListaFTP(i).ToString)
End If
Next
End If
If e.Node.Parent Is Nothing = False Then
NodoPadre = X.Parent.FullPath
NodoFiglio = X.FullPath
Else
NodoPadre = X.FullPath
NodoFiglio = NodoPadre
End If
CaricaCartellaPrecedente(NodoFiglio)
Exit Sub
Catch ex As Exception
MsgBox(ex.Message, vbCritical, "ERRORE")
End Try
End Sub
Private Function TrovaImg(ByVal Valore As String)
If Valore.ElementAtOrDefault(Valore.Length - 1) = "/" Then
Return 0 'Valore che corrisponde alla cartella - folder
Else
Return 1 'Valore che corrisponde al file .doc .txt .rar .mp3
End If
Return 2
End Function
Public Sub ProcessDir(ByVal Dir As String)
' Processa la lista dei files trovati nella directory passata
Dim fileEntries As String() = System.IO.Directory.GetFiles(Dir)
For Each fileName As String In fileEntries
ProcessFile(fileName)
Next
' Processa tutte le directory trovate nella directory passata alla funzione
Dim subdirectoryEntries As String() = System.IO.Directory.GetDirectories(Dir)
For Each subdirectory As String In subdirectoryEntries
ProcessDir(subdirectory)
Next
End Sub
Public Sub ProcessFile(ByVal FilePath As String)
ViewFolderAllLocalHost.Nodes.Add(FilePath)
End Sub
Private Sub ViewFolderServerAll_NodeMouseDoubleClick(ByVal sender As Object, ByVal e As System.Windows.Forms.TreeNodeMouseClickEventArgs) Handles ViewFolderServerAll.NodeMouseDoubleClick
Try
If e.Node.Text = ".." Then
NodoPadre = NodoPadre.Replace("//", "/")
CaricaCartellaPrecedente(NodoPadre & "/")
NodoFiglio = NodoPadre & "/"
NodoPadre = RecuperaNodoPadre(NodoPadre)
Else
CaricaCartellaPrecedente(NodoFiglio & e.Node.Text & "/")
NodoPadre = NodoFiglio
NodoFiglio = NodoPadre & e.Node.Text & "/"
'MsgBox("da implementare")
End If
Catch ex As Exception
End Try
End Sub
Private Function RecuperaNodoPadre(ByVal Nodo As String) As String
Dim Array() As String = Nodo.Split("/".ToArray, StringSplitOptions.RemoveEmptyEntries)
Dim risultato As String = Nothing
If Array.Length > 1 Then
risultato = Array(0).ToString() + "/"
For i As Integer = 1 To Array.Length - 2
risultato = risultato + "/" + Array(i).ToString.Replace("\", "")
Next
Else
Return "/"
End If
Return risultato
End Function
Private Sub CaricaCartellaPrecedente(ByVal cartella As String)
Dim i As Integer = 0
Do While i < ViewFolderServerAll.Nodes.Count
ViewFolderServerAll.Nodes.Item(i).Remove()
Loop
'Recupera l'elenco dei file e cartelle e salvali in un Array
Dim ElencoFileServerFTP() As String
ElencoFileServerFTP = ListaFileServer(cartella)
Dim NumeroImg As Integer
Dim Elemento As String
i = 0
ViewFolderServerAll.Nodes.Add("..")
ViewFolderServerAll.Nodes.Item(i).ImageIndex = 0
ViewFolderServerAll.Nodes.Item(i).SelectedImageIndex = 0
i = i + 1
For j As Integer = 0 To ElencoFileServerFTP.Length - 1
Elemento = PulisciArray(ElencoFileServerFTP(j).ToString)
NumeroImg = TrovaImg(ElencoFileServerFTP(j).ToString)
If (NumeroImg = 0) Then
ViewFolderServerAll.Nodes.Add(Elemento)
ViewFolderServerAll.Nodes.Item(i).ImageIndex = 0
ViewFolderServerAll.Nodes.Item(i).SelectedImageIndex = 0
Else
ViewFolderServerAll.Nodes.Add(Elemento)
ViewFolderServerAll.Nodes.Item(i).ImageIndex = 2
ViewFolderServerAll.Nodes.Item(i).SelectedImageIndex = 2
End If
i = i + 1
Next
End Sub
Private Sub CaricaTreeViewFolderLocal()
'Funzione che carica la lista degli hard disk e le cartelle
' preparazione della query sulla classe Management
Dim query As New SelectQuery("SELECT * FROM Win32_LogicalDisk")
Using searcher As New ManagementObjectSearcher(query)
For Each mobj As ManagementBaseObject In searcher.[Get]()
' prendiamo il codice del drive
Dim s As String = mobj.GetPropertyValue("DeviceId").ToString()
' aggiunta di un nuovo nodo
Dim nodo As New TreeNode()
nodo.Text = s + "\"
' il valore ritornato è una enumerazione visibile
' interrogando Win32_LogicalDisk
Dim i As UInteger = CType(mobj.GetPropertyValue("DriveType"), UInt32)
' incrementato di due perchè le prime due posizioni sono occupate
' ho generato le icone associate alla treeview in modo tale
' che non c'è bisogno di fare test sul valore
i += CType(2, UInt32)
' impostiamo uguali l'immagine selezionata e non selezionata
nodo.ImageIndex = CType(i, Integer)
nodo.SelectedImageIndex = nodo.ImageIndex
nodo.ToolTipText = String.Format("{0} {1} {2}", mobj.GetPropertyValue("Description"), mobj.GetPropertyValue("FileSystem"), mobj.GetPropertyValue("VolumeSerialNumber"))
ViewFoderLocalHost.Nodes.Add(nodo)
' è impossibile usare fullpath se prima non si aggiunge il nodo
' alla collection
AggiungiNodo(nodo)
Next
ViewFoderLocalHost.Nodes(0).ImageIndex = 2
End Using
End Sub
''' <summary>
''' Appende la cartella alla collection del nodo selezionato
''' </summary>
''' <param name="nodoPadre">Riferimento al nodo padre</param>
Private Sub AggiungiNodo(ByVal nodoPadre As TreeNode)
Dim cartella As String = nodoPadre.FullPath
If Not cartella.EndsWith("\") Then
cartella += "\"
End If
Try
For Each s As String In System.IO.Directory.GetDirectories(cartella)
Dim nodo As New TreeNode()
nodo.Text = New System.IO.DirectoryInfo(s).Name
nodo.ImageIndex = 0
nodo.SelectedImageIndex = 1
nodoPadre.Nodes.Add(nodo)
Next
Catch ex As Exception
MessageBox.Show("Non si ha il permesso di leggere la cartella")
End Try
End Sub
Private Sub CompilaListaFileLocation(ByVal folderPath As String)
PulisciTreeViewFolderAll() 'Pulisce
ViewFolderAllLocalHost.Nodes.Add("..") 'Carica
CaricaArrayListAllLocation(NodoFiglioLocal)
End Sub
''' <summary>
''' CaricaArrayListAllLocation - Funzione che serve per caricare e popolare la ViewFolderAllLocalHost
''' </summary>
''' <param name="folderPath"></param>
''' <remarks></remarks>
Private Sub CaricaArrayListAllLocation(ByVal folderPath As String)
' eliminiamo le doppie barre rovescie che danno fastido
If folderPath.Contains("\\") Then
folderPath = folderPath.Replace("\\", "\")
End If
Dim ArrayListFolderLocal As New ArrayList
Dim ArrayListAllLocal As New ArrayList
Dim i As Integer = 0
Try
For Each s As String In System.IO.Directory.GetDirectories(folderPath)
Dim dInfo As New System.IO.DirectoryInfo(s)
ArrayListFolderLocal.Add(dInfo.FullName)
ViewFolderAllLocalHost.Nodes.Add(dInfo.Name)
ViewFolderAllLocalHost.Nodes.Item(i).ImageIndex = 0
ViewFolderAllLocalHost.Nodes.Item(i).SelectedImageIndex = 1
i = i + 1
Next
Catch ex As Exception
MessageBox.Show("Non si ha il permesso di leggere la cartella")
End Try
i = i + 1
Try
' ciclo sui file e aggiunta elementi
For Each s As String In System.IO.Directory.GetFiles(folderPath)
Dim fInfo As New System.IO.FileInfo(s)
ArrayListAllLocal.Add(fInfo.FullName)
ViewFolderAllLocalHost.Nodes.Add(fInfo.Name)
ViewFolderAllLocalHost.Nodes.Item(i).ImageIndex = 9
ViewFolderAllLocalHost.Nodes.Item(i).SelectedImageIndex = 9
i = i + 1
Next
Catch ex As Exception
MessageBox.Show("Non si ha il permesso di leggere il file")
End Try
End Sub
''' <summary>
''' PulisciTreeViewFolderAll - Funzione che pulisce ViewFolderAllLocalHost
''' </summary>
''' <remarks></remarks>
Private Sub PulisciTreeViewFolderAll()
If ViewFolderAllLocalHost.Nodes.Count <> 0 Then
Dim i As Integer = 0
Do While (i < ViewFolderAllLocalHost.Nodes.Count)
ViewFolderAllLocalHost.Nodes.Item(i).Remove()
Loop
End If
End Sub
Private Sub ViewFoderLocalHost_AfterSelect(ByVal sender As Object, ByVal e As System.Windows.Forms.TreeViewEventArgs) Handles ViewFoderLocalHost.AfterSelect
'Pulisco prima di inserire i nodi
EliminaNodo(e.Node)
'Aggiungo i nuovi Nodi
AggiungiNodo(e.Node)
If e.Node.Parent Is Nothing = False Then
NodoPadreLocal = e.Node.Parent.FullPath.Replace("\\", "\")
NodoFiglioLocal = e.Node.FullPath.Replace("\\", "\")
Else
NodoPadreLocal = e.Node.FullPath.Replace("\\", "\")
NodoFiglioLocal = NodoPadreLocal
End If
CompilaListaFileLocation(NodoFiglioLocal)
End Sub
Private Sub ViewFolderAllLocalHost_NodeMouseClick(ByVal sender As Object, ByVal e As System.Windows.Forms.TreeNodeMouseClickEventArgs) Handles ViewFolderAllLocalHost.NodeMouseClick
Try
If e.Node.Text = ".." Then
EliminaNodo(e.Node)
CompilaListaFileLocation(NodoFiglioLocal)
NodoFiglioLocal = NodoPadreLocal
NodoPadreLocal = RecuperaNodoPadreLocal(NodoPadreLocal)
Else
'CaricaFolderSelectLocal(NodoFiglioLocal & "\" & e.Node.Text)
'NodoPadreLocal = NodoFiglioLocal.Replace("\\", "\")
'NodoFiglioLocal = NodoPadreLocal & "\" & e.Node.Text
MsgBox("da implementare")
End If
Exit Sub
Catch ex As Exception
Console.WriteLine(ex.ToString)
End Try
End Sub
''' <summary>
''' RecuperaNodoPadreLocal - Funzione che recupera il percorso del Padre
''' </summary>
''' <param name="Nodo">Passo tutto il percorso del nodo.FullName</param>
''' <returns></returns>
''' <remarks></remarks>
Private Function RecuperaNodoPadreLocal(ByVal Nodo As String) As String
Dim Array() As String = Nodo.Split("\".ToArray, StringSplitOptions.RemoveEmptyEntries)
Dim risultato As String = Nothing
If Array.Length > 1 Then
risultato = Array(0).ToString() + "\"
For i As Integer = 1 To Array.Length - 2
risultato = risultato + "\" + Array(i).ToString
Next
Else
Return Nodo
End If
Return risultato
End Function
Private Sub CaricaFolderSelectLocal(ByVal folderPath As String)
' eliminiamo le doppie barre rovescie che danno fastido
If folderPath.Contains("\\") Then
folderPath = folderPath.Replace("\\", "\")
End If
'Ripulisco il tutto
Dim i As Integer = 0
Do While i < ViewFolderAllLocalHost.Nodes.Count
ViewFolderAllLocalHost.Nodes.Item(i).Remove()
i = i + 1
Loop
Dim ArrayListFolderLocal As New ArrayList
Dim ArrayListAllLocal As New ArrayList
i = 0
ViewFolderAllLocalHost.Nodes.Add("..")
ViewFolderAllLocalHost.Nodes.Item(i).ImageIndex = 0
ViewFolderAllLocalHost.Nodes.Item(i).SelectedImageIndex = 1
i = i + 1
Try
For Each s As String In System.IO.Directory.GetDirectories(folderPath)
Dim dInfo As New System.IO.DirectoryInfo(s)
ArrayListFolderLocal.Add(dInfo.FullName)
ViewFolderAllLocalHost.Nodes.Add(dInfo.Name)
ViewFolderAllLocalHost.Nodes.Item(i).ImageIndex = 0
ViewFolderAllLocalHost.Nodes.Item(i).SelectedImageIndex = 1
i = i + 1
Next
Catch ex As Exception
' MessageBox.Show("Non si ha il permesso di leggere la cartella")
End Try
i = i + 1
Try
' ciclo sui file e aggiunta elementi
For Each s As String In System.IO.Directory.GetFiles(folderPath)
Dim fInfo As New System.IO.FileInfo(s)
ArrayListAllLocal.Add(fInfo.FullName)
ViewFolderAllLocalHost.Nodes.Add(fInfo.Name)
ViewFolderAllLocalHost.Nodes.Item(i).ImageIndex = 9
ViewFolderAllLocalHost.Nodes.Item(i).SelectedImageIndex = 9
i = i + 1
Next
Catch ex As Exception
' MessageBox.Show("Non si ha il permesso di leggere il file")
End Try
End Sub
End Class
Potete scaricare il file d'esempio :
Password : "ImaginSystem"