string[] filesSorgente = null;
long dimensioneTotaleSorgente = 0;
string newDir = "";
long dimensioneTotaleDir;
byte nomeSequenzaCartella = 0;
List<string> list = null;
public Form1()
{
InitializeComponent();
}
/// <summary>
/// Dimensione della cartella sorgente
/// </summary>
/// <param name="path"></param>
private void DimensioneCartella(string path)
{
filesSorgente = Directory.GetFiles(path, "*.*", System.IO.SearchOption.AllDirectories);
foreach (string file in filesSorgente)
{
FileInfo fi
= new FileInfo
(file
); dimensioneTotaleSorgente += fi.Length;
}
}
/// <summary>
/// Dimensione della nuova cartella creata
/// </summary>
/// <param name="path"></param>
private void DirNewFolder(string path)
{
foreach (string file in Directory.GetFiles(path, "*.*", System.IO.SearchOption.AllDirectories))
{
FileInfo fi
= new FileInfo
(file
); dimensioneTotaleDir += fi.Length;
}
}
private void ControlloCartellaDestinazione(string path)
{
list
= new List
<string>(); foreach (string str in Directory.GetDirectories(path))
{
if (str.StartsWith(path + @"\Prova_"))
list.Add(str);
}
}
private void btnSorgente_Click(object sender, EventArgs e)
{
FolderBrowserDialog fbd
= new FolderBrowserDialog
(); if (fbd.ShowDialog() == DialogResult.OK)
txtSorgente.Text = fbd.SelectedPath;
}
private void btnDestinazione_Click(object sender, EventArgs e)
{
FolderBrowserDialog fbd
= new FolderBrowserDialog
(); if (fbd.ShowDialog() == DialogResult.OK)
txtDestinazione.Text = fbd.SelectedPath;
}
private async void btnSplitta_Click(object sender, EventArgs e)
{
//Preleviamo la dimensione totale della directory sorgente
DimensioneCartella(txtSorgente.Text);
if (dimensioneTotaleSorgente <= 0) //Controllo la directory sorgente se è vuota
{
MessageBox.Show("La directory sorgente selezionata è vuota.", "Errore", MessageBoxButtons.OK, MessageBoxIcon.Warning);
return;
}
else
{
nomeSequenzaCartella = 1; //Numero aggiunto al nome della directory destinazione che verrà incrementato di uno se supera la dimensione scelta
newDir = txtDestinazione.Text + @"\Prova_";
if (!Directory.Exists(newDir + nomeSequenzaCartella))
Directory.CreateDirectory(newDir + nomeSequenzaCartella);
foreach (string file in filesSorgente)
{
FileInfo fi
= new FileInfo
(file
);
ControlloCartellaDestinazione(txtDestinazione.Text);
DriveInfo driveDest
= new DriveInfo
(txtDestinazione.
Text); if (driveDest.AvailableFreeSpace > dimensioneTotaleSorgente) //Controllo se lo spazio su disco è maggiore della directory passata
{
using (FileStream SourceReader = File.Open(file, FileMode.Open))
{
string path = Path.GetDirectoryName(fi.FullName);
int i = 1;
while (i <= list.Count)
{
dimensioneTotaleDir = 0;
DirNewFolder(newDir + i);
if ((dimensioneTotaleDir + fi.Length) <= 1400000000) //Controllo se lo spazio della cartella + la dimensione del file sono minori di 4.3gb
{
if (!Directory.Exists(txtDestinazione.Text + @"\Prova_" + i + path.Substring(txtSorgente.Text.Length) + "\\"))
Directory.CreateDirectory(txtDestinazione.Text + @"\Prova_" + i + path.Substring(txtSorgente.Text.Length) + "\\");
using (FileStream DestinationWriter = File.Create(txtDestinazione.Text + @"\Prova_" + i + path.Substring(txtSorgente.Text.Length) + "\\" + fi.Name))
{
await SourceReader.CopyToWithProgressAsync(DestinationWriter, 4096);
break;
}
}
if ((dimensioneTotaleDir + fi.Length) > 1400000000)
{
i++;
if (!Directory.Exists(txtDestinazione.Text + @"\Prova_" + i + path.Substring(txtSorgente.Text.Length) + "\\"))
Directory.CreateDirectory(txtDestinazione.Text + @"\Prova_" + i + path.Substring(txtSorgente.Text.Length) + "\\");
using (FileStream DestinationWriter = File.Create(txtDestinazione.Text + @"\Prova_" + i + fi.DirectoryName.Substring(txtSorgente.Text.Length) + "\\" + fi.Name))
{
await SourceReader.CopyToWithProgressAsync(DestinationWriter, 4096);
break;
}
}
}
//dimensioneTotaleDir = 0;
}
}
else
{
MessageBox.Show("Spazio richiesto insufficiente!", "Errore", MessageBoxButtons.OK, MessageBoxIcon.Warning);
return;
}
}
MessageBox.Show("Copia effettuata con successo.", "Avviso", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}