using Microsoft.VisualBasic;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Data;
using System.Diagnostics;
using System.IO;
public class FileHelper
{
//Private dirSourceDest As Dictionary(Of FileInfo, DirectoryInfo)
private int filesPerFolder;
private string suffix;
private int counterSize;
private int numerationType;
private string filter;
private bool separateFiles;
private string extensions = "*.jpg,*.png,*.gif";
public enum numerazione
{
Progressiva,
Files
}
///
/// Preparazione per la separazione
///
///
///
///
///
///
public FileHelper(int filesPerFolder, string suffix, int counterSize, int numerationType)
{
this.filesPerFolder = filesPerFolder;
this.suffix = suffix;
this.counterSize = counterSize;
this.numerationType = numerationType;
this.separateFiles = true;
}
///
/// nessuna separazione
///
///
public FileHelper()
{
this.separateFiles = false;
}
public Dictionary GetFilesRecursive(DirectoryInfo root, DirectoryInfo destRoot, string filter)
{
Dictionary dirSourceDest = new Dictionary();
List result = new List();
//Dim stack As New Stack(Of DirectoryInfo)
Stack> stack = new Stack>();
this.filter = filter;
KeyValuePair pair = new KeyValuePair();
//stack.Push(root)
stack.Push(new KeyValuePair(root, destRoot));
while ((stack.Count > 0))
{
KeyValuePair curDirKV = stack.Pop();
//curDirKP = stack.Pop()
DirectoryInfo dir = curDirKV.Key;
DirectoryInfo dDir = curDirKV.Value;
try
{
//result.AddRange(dir.GetFiles(filter, SearchOption.TopDirectoryOnly))
// dividere file qui
if (filesPerFolder > 0 & separateFiles)
{
appendDictionary(dirSourceDest, dividiFilesInDir(dir, dDir));
}
else
{
appendDictionary(dirSourceDest, getAllFilesInDir(dir, dDir));
}
foreach (DirectoryInfo subDirectory in dir.GetDirectories())
{
stack.Push(new KeyValuePair(subDirectory, new DirectoryInfo(Path.Combine(dDir.FullName, subDirectory.Name))));
}
}
catch (Exception ex)
{
}
}
return dirSourceDest;
}
public Dictionary appendDictionary(Dictionary dictA, Dictionary dictB)
{
foreach (KeyValuePair pair in dictB)
{
dictA.Add(pair.Key, pair.Value);
}
return dictA;
}
public Dictionary getAllFilesInDir(DirectoryInfo dir, DirectoryInfo dirDest)
{
Dictionary dict = new Dictionary();
foreach (FileInfo File in dir.GetFiles(filter))
{
dict.Add(File, new DirectoryInfo(Path.Combine(dirDest.FullName, File.Name)));
}
return dict;
}
private Dictionary dividiFilesInDir(DirectoryInfo dir, DirectoryInfo dirDest)
{
int filesCount = dir.GetFiles(filter).Length;
int contaFilePerDir = 0;
int contaDirPerDir = 0;
string tempText = string.Empty;
Dictionary foldersDict = new Dictionary();
DirectoryInfo destDir = null;
destDir = new DirectoryInfo(Path.Combine(dirDest.FullName));
foreach (FileInfo file in dir.GetFiles(filter))
{
contaFilePerDir += 1;
if (contaFilePerDir == (contaDirPerDir * filesPerFolder) + 1)
{
contaDirPerDir += 1;
if (numerazione.Progressiva.Equals(numerationType))
{
tempText = contaDirPerDir.ToString();
}
else
{
tempText = (contaDirPerDir * filesPerFolder).ToString();
}
int i = 0;
for (i = 1; i <= (counterSize - tempText.Length); i++)
{
tempText = "0" + tempText;
}
destDir = new DirectoryInfo(Path.Combine(dirDest.FullName, suffix + tempText));
}
if (!destDir.Exists)
{
destDir.Create();
}
foldersDict.Add(file, destDir);
}
return foldersDict;
}
}