Public Class MainForm
Private Sub Browse1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Browse1.Click
Dim Open As New OpenFileDialog
Open.Filter = "Tutti i file|*.*"
Open.Multiselect = False
'vine creata una OpenFileDialog che permetterà all'utente di scegliere il file
'la proprietà multiselect impedisce o permette che l'utente scelga più file
If Open.ShowDialog = Windows.Forms.DialogResult.OK Then
FilePathToBeShared.Text = Open.FileName
'quando l'utente ha scelto il file il percorso viene mostrato nella textbox
End If
End Sub
Private Sub Browse2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Browse2.Click
Dim Open As New OpenFileDialog
Open.Filter = "Tutti i file|*.*"
Open.Multiselect = True
'si possono selezionare più file
If Open.ShowDialog = Windows.Forms.DialogResult.OK Then
FilePathToMerge.Text = ""
For Each file As String In
Open.
FileNames
'tutti i file selezionati vengono scritti in questo modo "Path""Path" ecc.
FilePathToMerge.
Text = FilePathToMerge.
Text & """" & file & """"
Next
End If
End Sub
Private Sub AddFileToListFileToMerge_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles AddFileToListFileToMerge.Click
Dim path As String
For index As Integer = 0 To FilePathToMerge.Text.Length - 1
If Not FilePathToMerge.Text(index) = """" Then
path = path & FilePathToMerge.Text(index)
'se il carattere non è " vuol dire che è un carattere del percorso
'quindi viene aggiunto a path
Else
If IO.
File.
Exists(path
) Then
'se il file esiste viene aggiunto alla lista
ListFileToMerge.Items.Add(path)
End If
'viene eliminato ogni contenuto di path per il percorso successivo
path = ""
End If
Next
If IO.
File.
Exists(path
) Then
'se il file esiste viene aggiunto alla lista
ListFileToMerge.Items.Add(path)
End If
'alla può essere aggiunto anche un eventuale percorso senza virgolette
'(il computer lo può comunque individuare a differenza di due percorsi non separati),
'quindi se esiste viene aggiunto alla lista
End Sub
Private Sub Split_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Split.Click
If Not IO.
File.
Exists(FilePathToBeShared.
Text) Then
'se il file non esiste viene avvertito l'utente e si esce dalla procedra
MessageBox.Show("Il file non esiste, inserire il percorso di un file esistente", Me.Text, MessageBoxButtons.OK, MessageBoxIcon.Information)
Exit Sub
End If
Dim SplitMode As New SplitMode 'devono essere chieste all'utente alcune modalità di
'divisione del file, per questo è stata creata una finestra.
If SplitMode.ShowDialog = Windows.Forms.DialogResult.OK Then
Dim PNumber As Integer 'Pieces Number ovvero il numero dei pezzi del file
Dim PSize As Integer 'Pieces Size conterrà la dimensione (in byte) dei pezzi
If SplitMode.SplitIn.Checked = True Then
PNumber = SplitMode.PiecesNumber.Value
PSize
= IO.
File.
ReadAllBytes(FilePathToBeShared.
Text).
Length \ PNumber
+ 1 'si arrotonda per eccesso
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ù
Dim file As New IO.
FileStream(FilePathToBeShared.
Text, IO.
FileMode.
Open)
file.
Seek(temp
* PSize, IO.
SeekOrigin.
Begin)
Dim R
As New IO.
BinaryReader(file)
'R serve a leggere il file, R.Read legge a partire dalla posizione all'interno del file
'indicata da File.position, File.seek serve a modificare questa posizione
IO.
File.
WriteAllBytes(SplitMode.
PiecesDirectory.
Text & temp
& SplitMode.
PiecesExtension.
Text, R.
ReadBytes(PSize
))
'viene creato un file con un pezzo del file selezionato
R.Close()
Next
MessageBox.Show("Divisione avvenuta con successo" & Chr(10) & "Sono stati creati file da " & PSize & " Kb", Me.Text, MessageBoxButtons.OK, MessageBoxIcon.Information)
'si avverte l'utente che è stata terminata l'operazione
ElseIf SplitMode.SplitIntoFiles.Checked = True Then
PSize = SplitMode.PiecesSize.Value * 1024 'il valore è espresso in kilobyte, si effettua quindi
'una conversione (è inutile che lo scrivo però lo scrivo comunque) 1Kb = 1024B
PNumber
= IO.
File.
ReadAllBytes(FilePathToBeShared.
Text).
Length \ (SplitMode.
PiecesSize.
Value * 1024)
'il numero dei pezzi deve essere un numero intero arrotondato per difetto scrivendo \ al posto di / ottengo
'il la parte intera del risultato della divisione.
For temp As Integer = 0 To PNumber
Dim file As New IO.
FileStream(FilePathToBeShared.
Text, IO.
FileMode.
Open)
file.
Seek(temp
* PSize, IO.
SeekOrigin.
Begin)
Dim R
As New IO.
BinaryReader(file)
IO.
File.
WriteAllBytes(SplitMode.
PiecesDirectory.
Text & temp
& SplitMode.
PiecesExtension.
Text, R.
ReadBytes(PSize
))
R.Close()
Next
MessageBox.Show("Divisone avvenuta con successo" & Chr(10) & "Sono stati creati " & PNumber + 1 & " files", Me.Text, MessageBoxButtons.OK, MessageBoxIcon.Information)
'Pnumber contiene un pezzo in meno, questo perchè non contiene direttamente il numero dei pezzi,
'ma contiene il numero dei punti all'inteno del file dove è stato spezzato (ovvero 1 in meno dei pezzi)
End If
End If
End Sub
Private Sub EraseListFileToMerge_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles EraseListFileToMerge.Click
If MessageBox.Show("Verranno eliminati tutti i file, procedere?", Me.Text, MessageBoxButtons.YesNo, MessageBoxIcon.Question) = Windows.Forms.DialogResult.Yes Then
'viene chiesta conferma per la cancellazione di tutti i file nella listbox
ListFileToMerge.Items.Clear()
End If
End Sub
Private Sub RemoveFileFromListFileToMerge_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RemoveFileFromListFileToMerge.Click
If MessageBox.Show("Verranno eliminati i file selezionati, procedere?", Me.Text, MessageBoxButtons.YesNo, MessageBoxIcon.Question) = Windows.Forms.DialogResult.Yes Then
'anche quì viene chiesta conferma
Dim index As Integer = 0
While index <= ListFileToMerge.Items.Count - 1
'quì non è possibile usare un for perchè eliminando gli elementi
'continuerebbe ad eseguire le istruzioni lo stesso numero di volte
'mentre gli elementi si riducono, è quindi possibile che venga richiesto
'un elemento oltre il limite degli elementi
If ListFileToMerge.GetSelected(index) Then
'vene processato ogni elemento e se questo è selezionato viene eliminato
ListFileToMerge.Items.RemoveAt(index)
Else
'se si elimina un elemento e index aumenta automaticamente si salta un elemento
'quindi il computer o elimina l'elemento o aumenta l'indice per la prossima eliminazione
index += 1
End If
End While
End If
End Sub
Private Sub Merge_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Merge.Click
'se non ci sono file nell'elenco (o c'è neuno solo)
'viene avvertito l'utente che deve inserire almeno due files
If ListFileToMerge.Items.Count < 2 Then
MessageBox.Show("Devi inserire nella lista ameno due files da unire!", Me.Text, MessageBoxButtons.OK, MessageBoxIcon.Information)
Exit Sub
End If
Dim Save As New SaveFileDialog
Save.Filter = "Tutti i files|*.*"
'i file da unire possono essere uniti in un file con qualsiasi estensione.
If Save.ShowDialog = Windows.Forms.DialogResult.OK Then
'se l'utente ha scelto dove e con che nome salvare il file il computer parte con le operzioni
'per unire i files:
Dim File As New IO.
FileStream(Save.
FileName, IO.
FileMode.
Create)
Dim Writer
As New IO.
BinaryWriter(File)
'File serve perchè in essa saranno scritte alcune operazioni per scrivere.
'writer serve a scrivere con le modalità e nel percorso stabiliti.
For index As Integer = 0 To ListFileToMerge.Items.Count - 1
Writer.
Write(IO.
File.
ReadAllBytes(ListFileToMerge.
Items(index
)))
'il computer legge ogni elemento e writer lo scrive sul nuovo file
'(in realtà il file viene scritto quando si chiude Writer o quando si richiama la procedura Flush)
'quando si passano dei valori a Writer.Write questi verranno
'aggunti ad un array di bytes (o di caratteri nel caso Writer = IO.StreamWriter)
Next
Writer.Close()
MessageBox.Show("Fatto", Me.Text, MessageBoxButtons.OK, MessageBoxIcon.Information)
'viene informato l'utente che il computer ha completato l'operazione
'è molto confusionario cliccare un pulsante e non vedere nulla.
End If
End Sub
End Class