Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
FileSplitter - MainForm.vb

MainForm.vb

Caricato da: Ale96
Scarica il programma completo

  1. Public Class MainForm
  2.  
  3.     Private Sub Browse1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Browse1.Click
  4.         Dim Open As New OpenFileDialog
  5.         Open.Filter = "Tutti i file|*.*"
  6.         Open.Multiselect = False
  7.         'vine creata una OpenFileDialog che permetterà all'utente di scegliere il file
  8.         'la proprietà multiselect impedisce o permette che l'utente scelga più file
  9.         If Open.ShowDialog = Windows.Forms.DialogResult.OK Then
  10.             FilePathToBeShared.Text = Open.FileName
  11.             'quando l'utente ha scelto il file il percorso viene mostrato nella textbox
  12.         End If
  13.     End Sub
  14.  
  15.     Private Sub Browse2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Browse2.Click
  16.         Dim Open As New OpenFileDialog
  17.         Open.Filter = "Tutti i file|*.*"
  18.         Open.Multiselect = True
  19.         'si possono selezionare più file
  20.         If Open.ShowDialog = Windows.Forms.DialogResult.OK Then
  21.             FilePathToMerge.Text = ""
  22.             For Each file As String In Open.FileNames
  23.                 'tutti i file selezionati vengono scritti in questo modo "Path""Path" ecc.
  24.                 FilePathToMerge.Text = FilePathToMerge.Text & """" & file & """"
  25.             Next
  26.         End If
  27.     End Sub
  28.     Private Sub AddFileToListFileToMerge_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles AddFileToListFileToMerge.Click
  29.         Dim path As String
  30.         For index As Integer = 0 To FilePathToMerge.Text.Length - 1
  31.             If Not FilePathToMerge.Text(index) = """" Then
  32.                 path = path & FilePathToMerge.Text(index)
  33.                 'se il carattere non è " vuol dire che è un carattere del percorso
  34.                 'quindi viene aggiunto a path
  35.             Else
  36.                 If IO.File.Exists(path) Then
  37.                     'se il file esiste viene aggiunto alla lista
  38.                     ListFileToMerge.Items.Add(path)
  39.                 End If
  40.                 'viene eliminato ogni contenuto di path per il percorso successivo
  41.                 path = ""
  42.             End If
  43.         Next
  44.         If IO.File.Exists(path) Then
  45.             'se il file esiste viene aggiunto alla lista
  46.             ListFileToMerge.Items.Add(path)
  47.         End If
  48.         'alla può essere aggiunto anche un eventuale percorso senza virgolette
  49.         '(il computer lo può comunque individuare a differenza di due percorsi non separati),
  50.         'quindi se esiste viene aggiunto alla lista
  51.     End Sub
  52.  
  53.     Private Sub Split_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Split.Click
  54.         If Not IO.File.Exists(FilePathToBeShared.Text) Then
  55.             'se il file non esiste viene avvertito l'utente e si esce dalla procedra
  56.             MessageBox.Show("Il file non esiste, inserire il percorso di un file esistente", Me.Text, MessageBoxButtons.OK, MessageBoxIcon.Information)
  57.             Exit Sub
  58.         End If
  59.         Dim SplitMode As New SplitMode 'devono essere chieste all'utente alcune modalità di
  60.         'divisione del file, per questo è stata creata una finestra.
  61.         If SplitMode.ShowDialog = Windows.Forms.DialogResult.OK Then
  62.             Dim PNumber As Integer 'Pieces Number ovvero il numero dei pezzi del file
  63.             Dim PSize As Integer 'Pieces Size conterrà la dimensione (in byte) dei pezzi
  64.             If SplitMode.SplitIn.Checked = True Then
  65.                 PNumber = SplitMode.PiecesNumber.Value
  66.                 PSize = IO.File.ReadAllBytes(FilePathToBeShared.Text).Length \ PNumber + 1 'si arrotonda per eccesso
  67.                 For temp As Integer = 0 To PNumber - 1 ' se si parte da 0 e si arriva al valore specificato si crea un file in più
  68.                     Dim file As New IO.FileStream(FilePathToBeShared.Text, IO.FileMode.Open)
  69.                     file.Seek(temp * PSize, IO.SeekOrigin.Begin)
  70.                     Dim R As New IO.BinaryReader(file)
  71.                     'R serve a leggere il file, R.Read legge a partire dalla posizione all'interno del file
  72.                     'indicata da File.position, File.seek serve a modificare questa posizione
  73.                     IO.File.WriteAllBytes(SplitMode.PiecesDirectory.Text & temp & SplitMode.PiecesExtension.Text, R.ReadBytes(PSize))
  74.                     'viene creato un file con un pezzo del file selezionato
  75.                     R.Close()
  76.                 Next
  77.                 MessageBox.Show("Divisione avvenuta con successo" & Chr(10) & "Sono stati creati file da " & PSize & " Kb", Me.Text, MessageBoxButtons.OK, MessageBoxIcon.Information)
  78.                 'si avverte l'utente che è stata terminata l'operazione
  79.             ElseIf SplitMode.SplitIntoFiles.Checked = True Then
  80.                 PSize = SplitMode.PiecesSize.Value * 1024 'il valore è espresso in kilobyte, si effettua quindi
  81.                 'una conversione (è inutile che lo scrivo però lo scrivo comunque) 1Kb = 1024B
  82.                 PNumber = IO.File.ReadAllBytes(FilePathToBeShared.Text).Length \ (SplitMode.PiecesSize.Value * 1024)
  83.                 'il numero dei pezzi deve essere un numero intero arrotondato per difetto scrivendo \ al posto di / ottengo
  84.                 'il la parte intera del risultato della divisione.
  85.                 For temp As Integer = 0 To PNumber
  86.                     Dim file As New IO.FileStream(FilePathToBeShared.Text, IO.FileMode.Open)
  87.                     file.Seek(temp * PSize, IO.SeekOrigin.Begin)
  88.                     Dim R As New IO.BinaryReader(file)
  89.                     IO.File.WriteAllBytes(SplitMode.PiecesDirectory.Text & temp & SplitMode.PiecesExtension.Text, R.ReadBytes(PSize))
  90.                     R.Close()
  91.                 Next
  92.                 MessageBox.Show("Divisone avvenuta con successo" & Chr(10) & "Sono stati creati " & PNumber + 1 & " files", Me.Text, MessageBoxButtons.OK, MessageBoxIcon.Information)
  93.                 'Pnumber contiene un pezzo in meno, questo perchè non contiene direttamente il numero dei pezzi,
  94.                 'ma contiene il numero dei punti all'inteno del file dove è stato spezzato (ovvero 1 in meno dei pezzi)
  95.             End If
  96.         End If
  97.     End Sub
  98.  
  99.     Private Sub EraseListFileToMerge_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles EraseListFileToMerge.Click
  100.         If MessageBox.Show("Verranno eliminati tutti i file, procedere?", Me.Text, MessageBoxButtons.YesNo, MessageBoxIcon.Question) = Windows.Forms.DialogResult.Yes Then
  101.             'viene chiesta conferma per la cancellazione di tutti i file nella listbox
  102.             ListFileToMerge.Items.Clear()
  103.         End If
  104.     End Sub
  105.     Private Sub RemoveFileFromListFileToMerge_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RemoveFileFromListFileToMerge.Click
  106.         If MessageBox.Show("Verranno eliminati i file selezionati, procedere?", Me.Text, MessageBoxButtons.YesNo, MessageBoxIcon.Question) = Windows.Forms.DialogResult.Yes Then
  107.             'anche quì viene chiesta conferma
  108.             Dim index As Integer = 0
  109.             While index <= ListFileToMerge.Items.Count - 1
  110.                 'quì non è possibile usare un for perchè eliminando gli elementi
  111.                 'continuerebbe ad eseguire le istruzioni lo stesso numero di volte
  112.                 'mentre gli elementi si riducono, è quindi possibile che venga richiesto
  113.                 'un elemento oltre il limite degli elementi
  114.                 If ListFileToMerge.GetSelected(index) Then
  115.                     'vene processato ogni elemento e se questo è selezionato viene eliminato
  116.                     ListFileToMerge.Items.RemoveAt(index)
  117.                 Else
  118.                     'se si elimina un elemento e index aumenta automaticamente si salta un elemento
  119.                     'quindi il computer o elimina l'elemento o aumenta l'indice per la prossima eliminazione
  120.                     index += 1
  121.                 End If
  122.             End While
  123.         End If
  124.     End Sub
  125.  
  126.     Private Sub Merge_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Merge.Click
  127.         'se non ci sono file nell'elenco (o c'è neuno solo)
  128.         'viene avvertito l'utente che deve inserire almeno due files
  129.         If ListFileToMerge.Items.Count < 2 Then
  130.             MessageBox.Show("Devi inserire nella lista ameno due files da unire!", Me.Text, MessageBoxButtons.OK, MessageBoxIcon.Information)
  131.             Exit Sub
  132.         End If
  133.         Dim Save As New SaveFileDialog
  134.         Save.Filter = "Tutti i files|*.*"
  135.         'i file da unire possono essere uniti in un file con qualsiasi estensione.
  136.         If Save.ShowDialog = Windows.Forms.DialogResult.OK Then
  137.             'se l'utente ha scelto dove e con che nome salvare il file il computer parte con le operzioni
  138.             'per unire i files:
  139.             Dim File As New IO.FileStream(Save.FileName, IO.FileMode.Create)
  140.             Dim Writer As New IO.BinaryWriter(File)
  141.             'File serve perchè in essa saranno scritte alcune operazioni per scrivere.
  142.             'writer serve a scrivere con le modalità e nel percorso stabiliti.
  143.             For index As Integer = 0 To ListFileToMerge.Items.Count - 1
  144.                 Writer.Write(IO.File.ReadAllBytes(ListFileToMerge.Items(index)))
  145.                 'il computer legge ogni elemento e writer lo scrive sul nuovo file
  146.                 '(in realtà il file viene scritto quando si chiude Writer o quando si richiama la procedura Flush)
  147.                 'quando si passano dei valori a Writer.Write questi verranno
  148.                 'aggunti ad un array di bytes (o di caratteri nel caso Writer = IO.StreamWriter)
  149.             Next
  150.             Writer.Close()
  151.             MessageBox.Show("Fatto", Me.Text, MessageBoxButtons.OK, MessageBoxIcon.Information)
  152.             'viene informato l'utente che il computer ha completato l'operazione
  153.             'è molto confusionario cliccare un pulsante e non vedere nulla.
  154.         End If
  155.     End Sub
  156. End Class