using System.IO.Compression;
namespace TrimZipperExample
string basePath = @"D:\Documents\output";
string[] directories = Directory.GetDirectories(basePath);
foreach (var dir in directories)
var subdir = new DirectoryInfo(dir);
var zipPath = $@"{basePath}\{subdir.Name}.zip";
var isZipFileExist = File.Exists(zipPath);
Console.WriteLine($"Existing folder: {Path.GetFileName(zipPath)} already existed.");
ZipFile.CreateFromDirectory(dir, zipPath, CompressionLevel.Fastest, true);
Console.WriteLine($@"Error: {e.Message}");
public void StartWatching(string path)
var rootWatcher = new FileSystemWatcher();
rootWatcher.Created += new FileSystemEventHandler(OnRootFolderWatched);
rootWatcher.EnableRaisingEvents = true;
private void OnRootFolderWatched(object sender, FileSystemEventArgs e)
string fullPath = e.FullPath;
if (e.FullPath.Contains("New folder"))
Console.WriteLine("naming not accepted.");
FileAttributes attr = File.GetAttributes(fullPath);
if ((attr & FileAttributes.Directory) != FileAttributes.Directory &
((attr & FileAttributes.Archive) != FileAttributes.Archive))
Console.WriteLine("File not accept in root folder.");
Console.WriteLine($"Folder/File: {e.FullPath} {e.ChangeType}");
FileSystemWatcher subFolderWatcher = new FileSystemWatcher();
subFolderWatcher.Path = fullPath;
subFolderWatcher.EnableRaisingEvents = true;
subFolderWatcher.Filter = "*.*";
subFolderWatcher.NotifyFilter = NotifyFilters.FileName | NotifyFilters.DirectoryName;
subFolderWatcher.IncludeSubdirectories = false;
var aTimer = new System.Timers.Timer();
aTimer.Elapsed += new ElapsedEventHandler((s, evt) => OnTimedEvent(s, evt, subFolderWatcher));
aTimer.AutoReset = false;
subFolderWatcher.Created += new FileSystemEventHandler((s, evt) => subFolderWatcher_Created(s, evt, aTimer));
private void OnTimedEvent(object sender, ElapsedEventArgs evt, FileSystemWatcher subFolderWatcher)
subFolderWatcher.Dispose();
subFolderWatcher.EnableRaisingEvents = false;
Timer timer = sender as Timer;
Console.WriteLine($"time up. zip process at {evt.SignalTime}");
private void subFolderWatcher_Created(object sender, FileSystemEventArgs evt, Timer aTimer)
if (evt.FullPath.Contains(evt.Name))
Console.WriteLine($"restart the timer as {evt.Name} created on {DateTime.Now.ToString()}");
aTimer.AutoReset = false;
private static void Main(string[] args)
string path = @"D:\Documents\output";
var fileWatcher = new FileWatcher();
fileWatcher.StartWatching(path);
Console.WriteLine("Start watching... \n");