Gestione delle sub dir

di il
12 risposte

Gestione delle sub dir

Salve ho un problema a creare un ciclo che "automatizzi" la mia libreria che gestisce i libri in e pub e pdf, vorrei che riconoscesse oltre alla cartella selezionata anche le sue sotto cartelle esempio:
Dir master nome Pippo che contiene .epub e .pdf al interno ha anche delle sub dir Pippo1 ,Pippo2 che a sua volta contengono .epub e .pdf e magari contengono altre altre sub dir
Funzionamento della libreria : il programma smista libri salvati in questo modo qua "cartella prov - autore - titolo.epub/pdf" gli smista in base alla prima lettera del autore nelle cartelle dalla a alla z rinominadogli in questo modo "autore - titolo - cartella prov.epub/pdf" pero lo fa sollo della cartella principale e non anche delle sotto cartelle
ecco il codice che ho scritto per ora

Imports System.IO

Public Class Form1

    Dim i As Integer = 0
    Dim OOldfolder As String = Nothing
    Dim PathFolderX As String = Nothing
    Dim OldFolder As String = Nothing
    Dim fileound As String = Nothing
    Dim ArrayList As String = Application.StartupPath
    Dim directoryName As String = Nothing
    Dim array() As String = {"A", "B", "C", "D", "E", "F", "G", "H", "I", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "Z", "J", "K", "W", "X", "Y", "Z"}


    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load

        Try

            'Creazione delle cartelle principali
            For i = 0 To array.Count - 1

                If Directory.Exists(ArrayList & "\" & array(i)) = False Then

                    Directory.CreateDirectory(ArrayList & "\" & array(i))
                    TextBox2.Text = "Cartelle create: " & i

                Else

                    TextBox2.Text = "Cartelle esistenti: " & i

                End If


            Next

        Catch ex As Exception

        End Try

    End Sub


    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click


        FolderBrowser.ShowDialog()
        If ShowDialog.OK Then

            TextBox1.Text = FolderBrowser.SelectedPath
            OldFolder = TextBox1.Text
            directoryName = Path.GetDirectoryName(TextBox1.Text,)

            TextBox1.Text = TextBox1.Text.Replace(directoryName & "\", "") 'Ottengo il nome della cartella di provenienza
            directoryName = TextBox1.Text
            '     controllo se sono presenti altre cartelle 

            OOldfolder = ("C:\Users\Utente\Pictures\BV Collection\cartella bv")

        End If

    End Sub
    'End Sub

    Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click



        Try
            Dim di As New IO.DirectoryInfo(OldFolder)
            Dim dis As New IO.DirectoryInfo(OOldfolder)
            Dim aryFile As IO.FileInfo() = di.GetFiles("*.epub") ', searchOption:=SearchOption.AllDirectories)
            Dim aryFile2 As IO.FileInfo() = di.GetFiles("*.pdf") ', searchOption:=SearchOption.AllDirectories)
            Dim aryFile3 As IO.FileInfo() = dis.GetFiles("*.epub") ', searchOption:=SearchOption.AllDirectories)
            Dim _File As IO.FileInfo
            Dim _File2 As IO.FileInfo
            Dim _File3 As IO.FileInfo
            Dim dividi(2) As String
            Dim Conta As Integer = 0
            Dim FileEsistente As Integer = 0

            TextBox2.Text = ""

            If TextBox1.Text = "" Then
                MsgBox("Attenzione, il percorso della cartella risulta vuoto, perfavore selezionare la cartella contenente tutti i file .EPUB e riprovare!", MsgBoxStyle.Critical, "ATTENZIONE")
            End If
            'ricerca ind cartelle 
            For Each _File In aryFile

                dividi = Split(_File.Name, "- ")

                Dim substring As String = dividi(1).Substring(0, 1)
                dividi(2) = dividi(2).Replace(".epub", "")
                'Avvio Smistamento
                For i = 0 To array.Count - 1

                    If substring = array(i) Then

                        Dim NewFileName As String = dividi(1) & " - " & dividi(2) & " - " & dividi(0)


                        If File.Exists(ArrayList & "\" & array(i) & "\" & NewFileName & ".epub") = False Then

                            Conta += 1
                            File.Copy(OldFolder & "\" & _File.Name, ArrayList & "\" & array(i) & "\" & _File.Name)
                            My.Computer.FileSystem.RenameFile(ArrayList & "\" & array(i) & "\" & _File.Name, NewFileName & ".epub")

                        Else

                            FileEsistente += 1


                        End If

                    End If
                Next
            Next

            For Each _File3 In aryFile3

                dividi = Split(_File3.Name, "- ")

                Dim substring As String = dividi(1).Substring(0, 1)
                dividi(2) = dividi(2).Replace(".epub", "")
                'Avvio Smistamento
                For i = 0 To array.Count - 1

                    If substring = array(i) Then

                        Dim NewFileName As String = dividi(1) & " - " & dividi(2) & " - " & dividi(0)


                        If File.Exists(ArrayList & "\" & array(i) & "\" & NewFileName & ".epub") = False Then

                            Conta += 1
                            File.Copy(OOldfolder & "\" & _File3.Name, ArrayList & "\" & array(i) & "\" & _File3.Name)
                            My.Computer.FileSystem.RenameFile(ArrayList & "\" & array(i) & "\" & _File3.Name, NewFileName & ".epub")

                        Else

                            FileEsistente += 1


                        End If
                    End If
                Next
            Next

            For Each _File2 In aryFile2

                dividi = Split(_File2.Name, "- ")

                Dim substring As String = dividi(1).Substring(0, 1)
                dividi(2) = dividi(2).Replace(".pdf", "")
                'Avvio Smistamento
                For i = 0 To array.Count - 1

                    If substring = array(i) Then

                        Dim NewFileName As String = dividi(1) & " - " & dividi(2) & " - " & dividi(0)

                        If File.Exists(ArrayList & "\" & array(i) & "\" & NewFileName & ".pdf") = False Then

                            Conta += 1
                            File.Copy(OldFolder & "\" & _File2.Name, ArrayList & "\" & array(i) & "\" & _File2.Name)
                            My.Computer.FileSystem.RenameFile(ArrayList & "\" & array(i) & "\" & _File2.Name, NewFileName & ".pdf")

                        Else
                            FileEsistente += 1

                        End If
                    End If

                Next
            Next
            TextBox2.Text = TextBox2.Text & "Totale file epub nella cartella: " & aryFile.Count & vbCrLf
            TextBox2.Text = TextBox2.Text & "Totale file pdf nella cartella: " & aryFile2.Count & vbCrLf
            TextBox2.Text = TextBox2.Text & "Totale file copiati e rinominati: " & Conta & vbCrLf
            TextBox2.Text = TextBox2.Text & "File esistent non copiati controlla digiturura del file: " & FileEsistente & vbCrLf
            TextBox2.Text = TextBox2.Text & "Fine!" & vbCrLf


        Catch ex As Exception
            MessageBox.Show(ex.Message)
        End Try



    End Sub
    End Class
    

12 Risposte

  • Re: Gestione delle sub dir

    Usa i tag CODE per il codice e spiega cosa fa e cosa dovrebbe fare ... non è chiaro quello che hai chiesto.
  • Re: Gestione delle sub dir

    oregon ha scritto:


    Usa i tag CODE per il codice e spiega cosa fa e cosa dovrebbe fare ... non è chiaro quello che hai chiesto.
    Cosi va bene ? serve qualche spiegazione sulla mia domanda ?
  • Re: Gestione delle sub dir

    Beh ... direi che dovresti dire qualcosa sul codice, cosa fa, cosa non va ... copiarlo e provarlo tutto fa perdere un sacco di tempo e senza indicazioni più precise non lo fa nessuno ...
  • Re: Gestione delle sub dir

    Dartanial96 ha scritto:


    Salve ho un problema a creare un ciclo che "automatizzi" la mia libreria che gestisce i libri in e pub e pdf, vorrei che riconoscesse oltre alla cartella selezionata anche le sue sotto cartelle esempio:
    Dir master nome Pippo che contiene .epub e .pdf al interno ha anche delle sub dir Pippo1 ,Pippo2 che a sua volta contengono .epub e .pdf e magari contengono altre altre sub dir
    Funzionamento della libreria : il programma smista libri salvati in questo modo qua "cartella prov - autore - titolo.epub/pdf" gli smista in base alla prima lettera del autore nelle cartelle dalla a alla z rinominadogli in questo modo "autore - titolo - cartella prov.epub/pdf" pero lo fa sollo della cartella principale e non anche delle sotto cartelle
    ecco il codice che ho scritto per ora
    
    Imports System.IO
    
    Public Class Form1
    
        Dim i As Integer = 0
        Dim OOldfolder As String = Nothing
        Dim PathFolderX As String = Nothing
        Dim OldFolder As String = Nothing
        Dim fileound As String = Nothing
        Dim ArrayList As String = Application.StartupPath
        Dim directoryName As String = Nothing
        Dim array() As String = {"A", "B", "C", "D", "E", "F", "G", "H", "I", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "Z", "J", "K", "W", "X", "Y", "Z"}
    
    
        Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    
            Try
    
                'Creazione delle cartelle principali
                For i = 0 To array.Count - 1
    
                    If Directory.Exists(ArrayList & "\" & array(i)) = False Then
    
                        Directory.CreateDirectory(ArrayList & "\" & array(i))
                        TextBox2.Text = "Cartelle create: " & i
    
                    Else
    
                        TextBox2.Text = "Cartelle esistenti: " & i
    
                    End If
    
    
                Next
    
            Catch ex As Exception
    
            End Try
    
        End Sub
    
    
        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    
    
            FolderBrowser.ShowDialog()
            If ShowDialog.OK Then
    
                TextBox1.Text = FolderBrowser.SelectedPath
                OldFolder = TextBox1.Text
                directoryName = Path.GetDirectoryName(TextBox1.Text,)
    
                TextBox1.Text = TextBox1.Text.Replace(directoryName & "\", "") 'Ottengo il nome della cartella di provenienza
                directoryName = TextBox1.Text
                '     controllo se sono presenti altre cartelle 
    
                OOldfolder = ("C:\Users\Utente\Pictures\BV Collection\cartella bv")
    
            End If
    
        End Sub
        'End Sub
    
        Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
    
    
    
            Try
                Dim di As New IO.DirectoryInfo(OldFolder)
                Dim dis As New IO.DirectoryInfo(OOldfolder)
                Dim aryFile As IO.FileInfo() = di.GetFiles("*.epub") ', searchOption:=SearchOption.AllDirectories)
                Dim aryFile2 As IO.FileInfo() = di.GetFiles("*.pdf") ', searchOption:=SearchOption.AllDirectories)
                Dim aryFile3 As IO.FileInfo() = dis.GetFiles("*.epub") ', searchOption:=SearchOption.AllDirectories)
                Dim _File As IO.FileInfo
                Dim _File2 As IO.FileInfo
                Dim _File3 As IO.FileInfo
                Dim dividi(2) As String
                Dim Conta As Integer = 0
                Dim FileEsistente As Integer = 0
    
                TextBox2.Text = ""
    
                If TextBox1.Text = "" Then
                    MsgBox("Attenzione, il percorso della cartella risulta vuoto, perfavore selezionare la cartella contenente tutti i file .EPUB e riprovare!", MsgBoxStyle.Critical, "ATTENZIONE")
                End If
                'ricerca ind cartelle 
                For Each _File In aryFile
    
                    dividi = Split(_File.Name, "- ")
    
                    Dim substring As String = dividi(1).Substring(0, 1)
                    dividi(2) = dividi(2).Replace(".epub", "")
                    'Avvio Smistamento
                    For i = 0 To array.Count - 1
    
                        If substring = array(i) Then
    
                            Dim NewFileName As String = dividi(1) & " - " & dividi(2) & " - " & dividi(0)
    
    
                            If File.Exists(ArrayList & "\" & array(i) & "\" & NewFileName & ".epub") = False Then
    
                                Conta += 1
                                File.Copy(OldFolder & "\" & _File.Name, ArrayList & "\" & array(i) & "\" & _File.Name)
                                My.Computer.FileSystem.RenameFile(ArrayList & "\" & array(i) & "\" & _File.Name, NewFileName & ".epub")
    
                            Else
    
                                FileEsistente += 1
    
    
                            End If
    
                        End If
                    Next
                Next
    
                For Each _File3 In aryFile3
    
                    dividi = Split(_File3.Name, "- ")
    
                    Dim substring As String = dividi(1).Substring(0, 1)
                    dividi(2) = dividi(2).Replace(".epub", "")
                    'Avvio Smistamento
                    For i = 0 To array.Count - 1
    
                        If substring = array(i) Then
    
                            Dim NewFileName As String = dividi(1) & " - " & dividi(2) & " - " & dividi(0)
    
    
                            If File.Exists(ArrayList & "\" & array(i) & "\" & NewFileName & ".epub") = False Then
    
                                Conta += 1
                                File.Copy(OOldfolder & "\" & _File3.Name, ArrayList & "\" & array(i) & "\" & _File3.Name)
                                My.Computer.FileSystem.RenameFile(ArrayList & "\" & array(i) & "\" & _File3.Name, NewFileName & ".epub")
    
                            Else
    
                                FileEsistente += 1
    
    
                            End If
                        End If
                    Next
                Next
    
                For Each _File2 In aryFile2
    
                    dividi = Split(_File2.Name, "- ")
    
                    Dim substring As String = dividi(1).Substring(0, 1)
                    dividi(2) = dividi(2).Replace(".pdf", "")
                    'Avvio Smistamento
                    For i = 0 To array.Count - 1
    
                        If substring = array(i) Then
    
                            Dim NewFileName As String = dividi(1) & " - " & dividi(2) & " - " & dividi(0)
    
                            If File.Exists(ArrayList & "\" & array(i) & "\" & NewFileName & ".pdf") = False Then
    
                                Conta += 1
                                File.Copy(OldFolder & "\" & _File2.Name, ArrayList & "\" & array(i) & "\" & _File2.Name)
                                My.Computer.FileSystem.RenameFile(ArrayList & "\" & array(i) & "\" & _File2.Name, NewFileName & ".pdf")
    
                            Else
                                FileEsistente += 1
    
                            End If
                        End If
    
                    Next
                Next
                TextBox2.Text = TextBox2.Text & "Totale file epub nella cartella: " & aryFile.Count & vbCrLf
                TextBox2.Text = TextBox2.Text & "Totale file pdf nella cartella: " & aryFile2.Count & vbCrLf
                TextBox2.Text = TextBox2.Text & "Totale file copiati e rinominati: " & Conta & vbCrLf
                TextBox2.Text = TextBox2.Text & "File esistent non copiati controlla digiturura del file: " & FileEsistente & vbCrLf
                TextBox2.Text = TextBox2.Text & "Fine!" & vbCrLf
    
    
            Catch ex As Exception
                MessageBox.Show(ex.Message)
            End Try
    
    
    
        End Sub
        End Class
        
  • Re: Gestione delle sub dir

    Devi usare un algoritmo ricorsivo per esaminare l'albero in profondità
  • Re: Gestione delle sub dir

    Riusciresti essere un po piu preciso scusa ma non sono espertissimo ?
  • Re: Gestione delle sub dir

    Più preciso ... no... devi scrivere del codice che esplora le cartelle in modo ricorsivo... non si può dire diversamente...

    Fai delle ricerche in merito...
  • Re: Gestione delle sub dir

    oregon ha scritto:


    Più preciso ... no... devi scrivere del codice che esplora le cartelle in modo ricorsivo... non si può dire diversamente...

    Fai delle ricerche in merito...
    Ho fatto questo quando richiamo successivamente Dir mi da errore dicendo che deve essere chiamato con una patch.name
     Dim list As New List(Of String)
            For Each Dir As String In System.IO.Directory.GetDirectories(OldFolder)
                Dim dirInfo As New System.IO.DirectoryInfo(Dir)
                list.Add(dirInfo.FullName)
    
    
            Next
            For i = 0 To list.Count - 1
                For Each Dir As String In System.IO.Directory.GetDirectories(list.Item(i))
                    Dim dirInfo As New System.IO.DirectoryInfo(Dir)
                    list.Add(dirInfo.FullName)
    
                Next
  • Re: Gestione delle sub dir

    Hai fatto una ricerca di quello che ti ho suggerito?
  • Re: Gestione delle sub dir

    Ciao scusa se rispondo solo ora ma non ero piu al lavoro si ho fatto una ricerca , il problema che ho ora lui fa la ricerca nelle cartelle e selle sub dir ma non va nella sub dir della sub dir poi ho un problema che lui deve fare la copia nella cartella del libro che ha trovato e non lo fa
  • Re: Gestione delle sub dir

    Io intendo una ricerca su internet...
  • Re: Gestione delle sub dir

    oregon ha scritto:


    Io intendo una ricerca su internet...
    si ho fatto una ricerca su algoritmi ricorsivi ad albero ,[*] 'Dir' funzione deve essere anzitutto chiamata con un 'percorso' argomento[*]
    Come devo procedere a dichiararla ?
Devi accedere o registrarti per scrivere nel forum
12 risposte