/// <summary>
/// Fusionne plusieur fichier en un seul
/// NOTE: pour plus de "confort" on ajoutera Using System.IO
/// </summary>
/// <param name="bDestroy">True = Supprimer les fichiers sources</param>
/// <param name="sDestFile">Chemin du fichier de destination</param>
/// <param name="clearIfExists">True = Fichier de destination existe alors il sera supprimer</param>
/// <param name="aSrcFiles">Tableau de string contenant soit plusieur fichiers soit un SEUL nom de répertoire</param>
/// <returns>Le nombre de fichier fusionnés</returns>
public int MergeFiles(bool DestroySrc, string DestFile, bool ClearIfExists, string[] SrcFiles)
{
System.IO.StreamReader FReader;
string[] FNames;
int NbrMerged = 0;
//Tableau de source vide on sort sans rien faire
if (SrcFiles.Length == 0)
{
return NbrMerged;
}
//Si on souhaite repartire d'un fichier vierge
if ((ClearIfExists && System.IO.File.Exists(DestFile)))
{
System.IO.File.Delete(DestFile);
}
// suivant le cas on remplis les nom de fichiers avec soit
if (System.IO.Directory.Exists(SrcFiles[0]))
{
//1 - les fichiers contenus dans le répertoire
FNames = System.IO.Directory.GetFiles(SrcFiles[0]);
}
else
{
//2 - les fichiers passés en paramètre
FNames = SrcFiles;
}
foreach (string FPath in FNames)
{
//Si le fichier existe
if (System.IO.File.Exists(FPath))
{
//On le charge
FReader = new System.IO.StreamReader(FPath, System.Text.Encoding.GetEncoding("iso-8859-1"));
//On l'ajoute à la fin du fichier de destiantion
System.IO.File.AppendAllText(DestFile, FReader.ReadToEnd());
//On supprime le fichie rajouté si nécessaire
if (DestroySrc)
{
System.IO.File.Delete(FPath);
}
//On incrémente le nombre de fichiers fusionné.
NbrMerged++;
FReader.Close();
FReader.Dispose();
}
}
return NbrMerged;
}
//Exemple d'utilisation
//1 - en passant plusieurs fichier
MessageBox.Show(MergeFiles(false, @"C:\TestC.txt", true, new string[] { @"C:\Test\1.dat", @"C:\Test\2.dat" }).ToString());
//2 - en passant un répertoire
MessageBox.Show(MergeFiles(false, @"C:\TestC.txt", true, new string[] { @"C:\Test\" }).ToString());