Imaginsystems


Tecniche di Programmazione - Codici Sorgenti - News Informatiche
Archivio Posts
Anno 2014

Anno 2013

Anno 2012
Statistiche
  • Views Home Page: 71.612
  • Views Posts: 542.496
  • Views Gallerie: 0
  • n° Posts: 210
  • n° Commenti: 224

VB.NET - REALIZZARE UN FTPClient UTILIZZANDO .NET FRAMEWORK CON VISUAL BASIC .NET

VB.NET - REALIZZARE UN FTPClient UTILIZZANDO .NET FRAMEWORK CON VISUAL BASIC .NET 

Oggi voglio mettere a disposizione a tutti voi una serie di funzioni che possono essere utili per la creazione di un FTPClient , ci viene in aiuto le librerie che troviamo in .NET FRAMEWORK .

Premetto che sono ancora in lavorazione ma al 85 % il progetto è finito. Le principali funzioni che svolge l'FTPClient ci sono manca solo interagire con i componenti grafici che l'ascio a voi il compito. 



Sono stati implementati le parti TreeView che servono per far vedere le cartelle del Server FTP e sono funzionanti per la navigazione sia in profondità che a retroso .
Alla fine dell'articolo troverete il file Esempio che aggiorno ogni volta, sono ben accetti commenti e aiuti a migliorare.

Spiegazione delle funzioni create : 

        Call CaricaDati()  ' Funzione dove carica i dati per la avviare la connessione FTP Server , Username, Password, ServerFTP

'Funzione che serve ad inviare un file al Server - Fare UploadFile sul Server
Dim PercorsoFile As String = "c:\testo.txt"
       InvioFileFTP(PercorsoFile)

'Altro metodo per inviare i file al Server - Fare UploadFile sul Server
Dim PercorsoFile As String = "c:\testo.txt"
        InvioFileFTP_(PercorsoFile)

        'Download File dal Server al Pc Locale
        Dim CartellaDownload As String = "c:\scan"
        Dim FileServer As String = "f.txt"
DownloadFIle(FileServer, CartellaDownload)
       
        '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")

CODICE VISUAL STUDIO 2010 - VISUAL BASIC .NET - VB.NET :

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" 

Categoria: VB.NET
venerdì, 08 giu 2012 Ore. 14.23

Messaggi collegati


Ora e Data
Mappa
Blogs Amici
    Copyright © 2002-2007 - Blogs 2.0
    dotNetHell.it | Home Page Blogs
    ASP.NET 2.0 Windows 2003