using System; using System.IO; using System.Reflection; using System.Threading; using System.Linq; using System.Collections.Generic; using System.Threading.Tasks; namespace SplitPdf { class Program { public static string importFilesPath = @"\\fsdeg002\DatenStA61_S\Bauvorhaben\Import"; //private static string sourcePdfFilesPath = @"C:\Test\Compressor_In"; private static string sourcePdfFilesPath = @"C:\TEMP"; //private static string destinationPdfFilesPath = @"C:\Test\Compressor_Out"; private static string destinationPdfFilesPath = @"C:\temp_out"; public static List vorgänge = new List(); const int LIMIT = 30000000; static async Task Main(string[] args) { try { await SplitPdfInSubDir(sourcePdfFilesPath); //CopyFolderAndFiles(new DirectoryInfo(sourcePdfFilesPath), new DirectoryInfo(destinationPdfFilesPath)); //DeleteSourceFiles(new DirectoryInfo(sourcePdfFilesPath)); //Pdf.GenerateNewImportFiles(vorgänge); } catch (Exception ex) { Console.WriteLine(ex.Message); } } public static async Task SplitPdfInSubDir(string path) { var info = new DirectoryInfo(path); var countDir = info.GetDirectories().Length; bool result = false; int teil = 0; if (countDir != 0) { foreach (var dir in info.GetDirectories()) { await SplitPdfInSubDir(dir.ToString()); } } else { var count = Directory.GetFiles(path, "*.pdf").Length; if (count != 0) { foreach (var file in Directory.GetFiles(path)) { var fi = new FileInfo(file); vorgänge.Add(path.Split('\\').LastOrDefault()); if (fi.Length < LIMIT)// || fi.FullName.Contains("Teil")) continue; Console.WriteLine("splitting... {0}", fi.Name); await Task.Run(() => { result = Pdf.SplitBySize(file, LIMIT, ref teil); }); File.Delete(fi.FullName); } } } return result; } public static void CopyFolderAndFiles(DirectoryInfo source, DirectoryInfo target) { Directory.CreateDirectory(target.FullName); if (source.GetFiles().Length > 1) { foreach (FileInfo fi in source.GetFiles().Where(x => x.FullName.Contains("Teil"))) { Console.WriteLine("copying... {0}", fi.Name); fi.CopyTo(Path.Combine(target.FullName, fi.Name), true); } } else { foreach (FileInfo fi in source.GetFiles()) { fi.CopyTo(Path.Combine(target.FullName, fi.Name), true); } } //Directories foreach (DirectoryInfo diSourceSubDir in source.GetDirectories()) { DirectoryInfo nextTargetSubDir = target.CreateSubdirectory(diSourceSubDir.Name); CopyFolderAndFiles(diSourceSubDir, nextTargetSubDir); } } public static void DeleteSourceFiles(DirectoryInfo source) { foreach (var item in source.GetDirectories()) { Directory.Delete(item.FullName, true); } } } }