Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 14
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2012
    Messaggi
    8

    [VisualStudio 2010 - Form Windows] - Creazione cartelle automaticamente in path

    Ciao!
    Mi è stato chiesto in ufficio di realizzare una procedura automatica per creare una serie di cartelle specifiche in un path sempre diverso.
    Ho creato il mio bel form su VisualStudio ma una volta arrivato alla compilazione vera e propria mi sono piantato senza saper andare avanti.
    Pensavo di ricordare qualcosa dall'università ma evidentemente mi sbagliavo,e quindi chiedo gentilmente aiuto a voi
    Vi illustro il mio "progetto"!



    Nel primo ComboBox (ComboBox1) si può scegliere una delle 3 unità di rete mappate sul pc ( S:\ - T:\ - U:\ ) ed è il path all'interno del quale verrà creata la cartella col nome inserito nel TextBox (TextBox1).
    L'ultimo ComboBox (ComboBox2) permette di scegliere fra 3 diverse tipologie di lavoro IMMAGINI , VIDEO , APPLICATIVO REAL TIME e a seconda della voce scelta vengono create una serie di cartelle.
    vi posto il codice (molto base) però è già qualcosa!
    Riuscireste ad aiutarmi?

  2. #2
    Utente di HTML.it
    Registrato dal
    Jan 2012
    Messaggi
    8
    codice:
    Public Class Form1
    
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    
        End Sub
    
        Private Sub Label1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Label1.Click, Label2.Click, Label3.Click
    
        End Sub
    
        Private Sub ComboBox2_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox2.SelectedIndexChanged
           
        End Sub
    
        Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged
    
        End Sub
    
    
    End Class
    visto che ci sono posto anche il .bat!

    codice:
    md _out
    md _out\z.trash
    md __scene
    md __scene\z.trash
    md imgtest
    md imgtest\z.trash
    md maps
    md maps\z.trash
    md models
    md models\z.trash
    md xref
    md xref\z.trash
    md proxy
    md proxy\z.trash
    md renderassets
    md renderassets\z.trash
    md renderpresets
    md renderpresets\z.trash
    md materiale
    md materiale\z.trash
    md docs
    md docs\z.trash
    md reference
    md z.trash
    md _editing
    md _post
    md renderoutput

  3. #3
    Utente di HTML.it L'avatar di Vinsent
    Registrato dal
    May 2011
    Messaggi
    314
    Penso che il bat sia inutile....puoi ottenere quello che ti serve leggendo:
    http://msdn.microsoft.com/it-it/library/system.io.aspx
    e
    http://msdn.microsoft.com/it-it/libr...directory.aspx

  4. #4
    Utente di HTML.it
    Registrato dal
    Jan 2012
    Messaggi
    8
    Ciao!
    Grazie mille dei suggerimenti,mi son messo subito al lavoro e qualcosa son riuscito a crearla!
    Per ora solo una misera cartella ma è già qualcosa...
    prima di andare avanti e creare sottocartelle,volevo impostare però un opzione,ossia che mi uscisse una finestra di errore se la cartella con quel nome esiste già.

    Vi incollo il codice e poi vi spiego il mio problema.

    codice:
    Imports System
    Imports System.IO
    Imports System.Collections
    
    Public Class Form1
    
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            Dim path As String = "C:\Users\m.zizza\Desktop\Test"
            Try
                If Directory.Exists(Path) = False Then
                    Directory.CreateDirectory(path)
                    MsgBox("Cartella creata!")
                End If
    
                If Directory.Exists(path) = True Then
                    MsgBox("La cartella è già esistente!")
                End If
    
            Catch ex As Exception
                Console.WriteLine("Processo Fallito", ex.ToString())
            End Try
        End Sub
    Quando vado a cliccare sul tasto mi esce prima un msgBox con scritto Cartella Creata e subito dopo il msgBox "Cartella già esistente".
    Ecco vorrei che quest'ultimo msgBox mi uscisse solo nel caso in cui la cartella esistesse e non anche nella prima procedura!
    Se non mi sono spiegato,dite pure

    grazie mille
    ciao!

  5. #5
    Utente di HTML.it L'avatar di Vinsent
    Registrato dal
    May 2011
    Messaggi
    314
    Vedi l' utilizzo di IF/THEN/ELSE:
    http://msdn.microsoft.com/it-it/library/752y8abs.aspx

  6. #6
    Utente di HTML.it
    Registrato dal
    Jan 2012
    Messaggi
    8
    Grazie a te sto viaggiando spedito come un treno!
    Ho risolto usando solo un Else nella posizione giusta e tutto funziona come dovrebbe.
    Ora però dovrei fare un salto di livello,e vorrei aggiungere la possibilità di:
    1. Impostare un percorso mediante il primo combobox
    2. impostare il nome della cartella mediante il textbox
    3. creare delle sottocartelle nella cartella creata sopra.

    Per l'ultimo punto,ragionando pensavo che potrei impostare una seria di IF e DIM che mi vanno a creare le varie cartelle a seconda del nome impostato nella variabile.Sbaglio?

    ringrazio in anticipo nuovamente

  7. #7
    Utente di HTML.it L'avatar di Vinsent
    Registrato dal
    May 2011
    Messaggi
    314
    Originariamente inviato da diagre
    Grazie a te sto viaggiando spedito come un treno!
    Di niente! Hai fatto tutto da solo, io ti ho solo indicato dove guardare...e considera che sono alle prime armi anch' io...non posto tante "domande" perchè mi piace sbatterci la testa e arrivarci da solo ed in genere basta cercare in rete, creo solo qualche programmino per hobby.

    1. Impostare un percorso mediante il primo combobox
    2. impostare il nome della cartella mediante il textbox
    3. creare delle sottocartelle nella cartella creata sopra
    Mai fatto! Nel senso delle unità in rete.
    Ho provato a scrivere qualche riga per imparare una cosa nuova ma non so come si comporta se le unità in rete sono disconnesse e non ho possibilità di provare.
    Se vuoi approfondire qualche funzione che ho usato puoi scrivere qualcosa tipo 'msdn DriveType' su un motore di ricerca, il primo risultato di google è http://msdn.microsoft.com/it-it/libr...drivetype.aspx
    Di seguito il codice, molto grezzo, per ottenere il percorso tramite i tre "punti". Bisogna implementare la verifica se la cartella principale esiste e che la textbox non contenga caratteri non consentiti, si allunga troppo...e devo andare a mangiare...
    Studialo un pò, e se vuoi, chiedi pure:
    codice:
    Public Class Form1
    
        Private Sub Form1_Load() Handles MyBase.Load
            ComboBox1.DropDownStyle = ComboBoxStyle.DropDownList
            ComboBox2.DropDownStyle = ComboBoxStyle.DropDownList
            Dim tipo_drive As String
            '>Case "Network"< aggiunge i drive di rete presenti su
            ' "risorse del computer", verificare il comportamento
            ' se il drive non è connesso.
            For a = 0 To My.Computer.FileSystem.Drives.Count - 1 Step 1
                tipo_drive = My.Computer.FileSystem.Drives(a).DriveType.ToString
                Select Case tipo_drive
                    Case "Fixed"
                        ComboBox1.Items.Add(My.Computer.FileSystem.Drives(a).ToString)
                    Case "Network"
                        ComboBox1.Items.Add(My.Computer.FileSystem.Drives(a).ToString)
                End Select
            Next
            ComboBox2.Items.Add("APPLICATIVO REAL TIME")
            ComboBox2.Items.Add("IMMAGINI")
            ComboBox2.Items.Add("VIDEO ")
        End Sub
    
        Private Sub Button1_Click() Handles Button1.Click
            If ComboBox1.SelectedItem = "" Then
                MsgBox("seleziona un percorso")
                Return
            Else
                If TextBox1.Text = "" Then
                    MsgBox("manca il nome della cartella")
                    Return
                Else
                    If ComboBox2.SelectedItem = "" Then
                        MsgBox("seleziona il tipo di lavoro")
                        Return
                    End If
                End If
            End If
            Dim percorso As String
            Select Case ComboBox2.SelectedItem
                Case "APPLICATIVO REAL TIME"
                    percorso = ComboBox1.SelectedItem & TextBox1.Text & "\" & ComboBox2.SelectedItem
                Case "IMMAGINI"
                    percorso = ComboBox1.SelectedItem & TextBox1.Text & "\" & ComboBox2.SelectedItem
                Case "VIDEO"
                    percorso = ComboBox1.SelectedItem & TextBox1.Text & "\" & ComboBox2.SelectedItem
            End Select
        End Sub
    End Class

  8. #8
    Utente di HTML.it
    Registrato dal
    Jan 2012
    Messaggi
    8
    Allora per entrambi è una buonissima opportunità di accrescimento!
    Io purtroppo sono "costretto" a postare a causa della mia poca conoscenza del linguaggio.
    Avendo fatto un anno di ing informatica e poi esser passato a fare architettura a volte mi sembra di fare il passo più lungo della gamba,ma diciamo che con un bel pò di stretching ce la si fa!

    Innanzitutto grazie per l'aiuto immenso,ho testato il codice che mi hai incollato e funziona benissimo anche se vede comunque le unità quando non sono connesse,quindi magari leggendo per benino quel driveType riesco a implementare il "non far vedere" le unità disconnesse.Ci lavorerò!
    L'unica modifica che forse andrò a fare sarà quella di eliminare la possibilità di selezionare la risorse FIXED (chiavette usb etc...)

    Per quanto riguarda la verifica del nome troppo lungo non ce n'è bisogno in quanto spesso diamo nomi brevi proprio per facilitare il flusso produttivo e senza caratteri speciali

    Studiando il codice l'ho modificato in questo modo e funziona!

    codice:
    Imports System
    Imports System.IO
    Imports System.Collections
    
    Public Class Form1
    
        Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
            Dim percorso As String = ComboBox1.SelectedItem & TextBox1.Text & "\" & ComboBox2.SelectedItem
            Dim percorso1 As String = percorso
            If ComboBox1.SelectedItem = "" Then
                MsgBox("Selezionare un unità di rete")
                Return
            Else
                If TextBox1.Text = "" Then
                    MsgBox("Inserire il nome della cartella")
                    Return
                Else
                    If ComboBox2.SelectedItem = "" Then
                        MsgBox("Seleziona il tipo di lavoro")
                        Return
                    End If
                End If
            End If
    
            Try
                If Directory.Exists(percorso1) = False Then
                    Directory.CreateDirectory(percorso1)
                    MsgBox("Cartella creata!")
                Else
                    If Directory.Exists(percorso1) = True Then
                        MsgBox("La cartella è già esistente!")
                    End If
                End If
    
            Catch ex As Exception
                Console.WriteLine("Processo Fallito", ex.ToString())
            End Try
    
        End Sub
    
        Private Sub Form1_Load() Handles MyBase.Load
            ComboBox1.DropDownStyle = ComboBoxStyle.DropDownList
            ComboBox2.DropDownStyle = ComboBoxStyle.DropDownList
            Dim tipo_drive As String
            '>Case "Network"< aggiunge i drive di rete presenti su
            ' "risorse del computer", verificare il comportamento
            ' se il drive non è connesso.
            For a = 0 To My.Computer.FileSystem.Drives.Count - 1 Step 1
                tipo_drive = My.Computer.FileSystem.Drives(a).DriveType.ToString
                Select Case tipo_drive
                    Case "Network"
                        ComboBox1.Items.Add(My.Computer.FileSystem.Drives(a).ToString)
                End Select
            Next
            ComboBox2.Items.Add("Applicativo Real Time")
            ComboBox2.Items.Add("Immagini")
            ComboBox2.Items.Add("Video")
        End Sub
    End Class
    solo che ora va a creare all'interno della cartella (quella col nome che metto nel textbox) un ulteriore cartella col nome impostato nel comboBox2.
    A me servirebbe invece creare molte più cartelle e con nomi diversi a seconda del lavoro scelto.
    Ti faccio un esempio per capire meglio.

    - IMMAGINI
    - imgTest
    - imgTest\Trash
    - imgDef
    - imgDef\Trash
    - xref
    etc...

    Ora il nodo so che risiede in questa riga:
    codice:
    Dim percorso As String = ComboBox1.SelectedItem & TextBox1.Text & "\" & ComboBox2.SelectedItem
    Io vorrei impostare una condizione IF di modo che:
    codice:
    If ComboBox2.SelectedItem = Immagini
    allora le cartelle da creare sono quelle sopraelencate.
    Solo che mi sono bloccato e non trovo l'uscita.

  9. #9
    Utente di HTML.it L'avatar di Vinsent
    Registrato dal
    May 2011
    Messaggi
    314
    Per le unità in rete disconnesse pensavo più che altro se il codice può generare un' eccezione e se sia necessario gestirla...

    codice:
    Dim percorso As String = ComboBox1.SelectedItem & TextBox1.Text & "\" & ComboBox2.SelectedItem
    Traduzione in italiano :
    la variabile "percorso" è una stringa = il testo selezionato di combox1 più il testo di textbox1 più \ più il testo selezionato di combox2. Comunque avevo capito male il percorso da creare, basta eliminare & "\" & ComboBox2.SelectedItem.
    Il risultato puoi leggerlo durante il debug usando Console.Writeline() nella scheda output di visual studio, lo inserisco dopo nel codice, quando il programma è ultimato, o non ti serve più, puoi eliminare l'istruzione.
    Per i drive da elencare vedi tu, visto che ti interessa un solo valore puoi usare una semplice IF al posto di SELECT CASE, comunque non cambia molto:
    codice:
    If tipo_drive = "Network" Then
        ComboBox1.Items.Add(My.Computer.FileSystem.Drives(a).ToString)
    End If
    Mentre per il controllo sul testo della textbox...tendo sempre a sottovalutare l' utilizzatore e quello che può combinare...mi hanno chiesto perchè si muoveva la freccia sul monitor quando toccavano il mouse
    Sulla Sub button1_click fai due errori, assegni un valore a "percorso" prima delle verifiche sui controlli per cui è un' operazione inutile, "percorso1" è solo in più.
    Mentre, nel codice che avevo postato, il blocco Select Case ComboBox2.SelectedItem serve per decidere cosa fare in base al valore del testo selezionato sulla ComboBox2.
    codice:
    Private Sub Button1_Click() Handles Button1.Click
            If ComboBox1.SelectedItem = "" Then
                MsgBox("seleziona un percorso")
                Return
            Else
                If TextBox1.Text = "" Then
                    MsgBox("manca il nome della cartella")
                    Return
                Else
                    If ComboBox2.SelectedItem = "" Then
                        MsgBox("seleziona il tipo di lavoro")
                        Return
                    End If
                End If
            End If
            Dim percorso = ComboBox1.SelectedItem & TextBox1.Text
            Console.WriteLine("unità: " & ComboBox1.SelectedItem)
            Console.WriteLine("cartella: " & TextBox1.Text)
            Console.WriteLine("percorso completo: " & percorso)
            Try
                If Directory.Exists(percorso) = True Then
                    MsgBox("La cartella " & TextBox1.Text & " sull' unità " & ComboBox1.SelectedItem & " è già esistente!")
                    Return
                End If
            Catch ex As Exception
                MsgBox("Si è verificato un errore:" & vbCrLf & ex.Message)
                Return
            End Try
            Dim sotto_cartelle As New ArrayList
            Select Case ComboBox2.SelectedItem
                Case "APPLICATIVO REAL TIME"
                    'vedi sotto
                Case "IMMAGINI"
                    sotto_cartelle.Add("imgTest")
                    sotto_cartelle.Add("imgTest\Trash")
                    sotto_cartelle.Add("imgDef")
                    sotto_cartelle.Add("imgDef\Trash")
                    sotto_cartelle.Add("xref")
                Case "VIDEO"
                    'vedi sopra
            End Select
            Try
                Directory.CreateDirectory(percorso)
                For a = 0 To sotto_cartelle.Count - 1 Step 1
                    Directory.CreateDirectory(percorso & "\" & sotto_cartelle(a))
                    Console.WriteLine("creato percorso: " & percorso & "\" & sotto_cartelle(a))
                Next
            Catch ex As Exception
                MsgBox("Si è verificato un errore:" & vbCrLf & ex.Message)
                sotto_cartelle = Nothing
                Return
            End Try
            sotto_cartelle = Nothing
            MsgBox("Cartelle create!")
        End Sub

  10. #10
    Utente di HTML.it
    Registrato dal
    Jan 2012
    Messaggi
    8
    Ciao!
    Ieri ho avuto modo di andare avanti sul "progetto" e posso dire che sono molto contento di come è uscito.
    Ho riletto più volte quello che mi hai scritto e ho cercato di mettere in pratica sia la tua idea che la mia e alla fine sono riuscito a creare le tanto agognate cartelle!
    il codice è questo:

    codice:
    Imports System
    Imports System.IO
    Imports System.Collections
    Imports System.Windows.Forms
    
    Public Class Form1
    
        Private Sub Form1_Load() Handles MyBase.Load
            ComboBox1.DropDownStyle = ComboBoxStyle.DropDownList
            ComboBox2.DropDownStyle = ComboBoxStyle.DropDownList
            Dim tipo_drive As String
            For a = 0 To My.Computer.FileSystem.Drives.Count - 1 Step 1
                tipo_drive = My.Computer.FileSystem.Drives(a).DriveType.ToString
                Select Case tipo_drive
                    Case "Network"
                        ComboBox1.Items.Add(My.Computer.FileSystem.Drives(a).ToString)
                End Select
            Next
            ComboBox2.Items.Add("Immagini")
            ComboBox2.Items.Add("Video")
        End Sub
    
        Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
            Dim percorso As String = ComboBox1.SelectedItem & TextBox1.Text
            Dim percorso1 As String = percorso
    
            Dim Img = "Immagini"
            Dim Vid = "Video"
    
            If ComboBox1.SelectedItem = "" Then
                MsgBox("Selezionare un unità di rete")
                Return
            Else
                If TextBox1.Text = "" Then
                    MsgBox("Inserire il nome della cartella")
                    Return
                Else
                    If ComboBox2.SelectedItem = "" Then
                        MsgBox("Seleziona il tipo di lavoro")
                        Return
                    End If
                End If
            End If
            Try
                If Directory.Exists(percorso1) = False Then
                    Directory.CreateDirectory(percorso1)
                    MsgBox("Cartella creata!")
                Else
                    If Directory.Exists(percorso1) = True Then
                        MsgBox("La cartella è già esistente!")
                    End If
                End If
    
            Catch ex As Exception
                Console.WriteLine("Processo Fallito", ex.ToString())
            End Try
    
            Dim sotto_cartelle As New ArrayList
            Select Case ComboBox2.SelectedItem
    
                Case Img
                    sotto_cartelle.Add("imgTest")
                    sotto_cartelle.Add("imgDef")
                    sotto_cartelle.Add("renderassets")
                Case Vid
                    sotto_cartelle.Add("scene")
                    sotto_cartelle.Add("maps")
                    sotto_cartelle.Add("docs")
                    sotto_cartelle.Add("xref")
                    sotto_cartelle.Add("proxy")
                    sotto_cartelle.Add("models")
                    sotto_cartelle.Add("containers")
                    sotto_cartelle.Add("imgTest")
                    sotto_cartelle.Add("renderpresets")
                    sotto_cartelle.Add("renderassets")
                    sotto_cartelle.Add("reference")
                    sotto_cartelle.Add("editing")
                    sotto_cartelle.Add("post")
            End Select
            Try
                Directory.CreateDirectory(percorso)
                For a = 0 To sotto_cartelle.Count - 1 Step 1
                    Directory.CreateDirectory(percorso & "\" & sotto_cartelle(a))
                    Console.WriteLine("creato percorso: " & percorso & "\" & sotto_cartelle(a))
                Next
            Catch ex As Exception
                MsgBox("Si è verificato un errore:" & vbCrLf & ex.Message)
                sotto_cartelle = Nothing
                Return
            End Try
        End Sub
    End Class
    Ha un pò di imperfezioni che però oggi pensavo di risolvere,tipo quella famosa variabile percorso1 che vado ad impostare e che non serve a una beata cippa se non ai miei trip mentali!

    Pensavo però di implementare due funzioni:

    1.Alla selezione dell'unità di rete dare la possibilità di:
    - A) Scegliere di creare una nuova cartella col nome del textbox
    - B) Scegliere una delle cartelle presenti (su quell'unità di rete) e creare la cartella col nome del textbox (all'interno della cartella scelta prima)

    2.La possibilità di avere un Browse folder (oltre alla scelta dell'unità)

    Riusciresti a linkarmi qualcosa per capire almeno da dove iniziare?
    ti ringrazio ancora!
    Ciau

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.