What about having a utility that zips and emails your project
folder content? I agree that the source
control tools provides backup. But this
utility can be used to easily take the backup of your private projects at home.
The project folder usually contains many other folders and
with different file extensions. The .Net
inbuilt zipping library can be used to compress a file. But not the entire file/folder structure like
winzip. There are multiple choces for
creating zip files like using J#/ZipPackage/Third Party/DotNetZip framework.
My chosen solution to zip entire folder content can be the use
of DotNetZip which is an open source library for zipping. There are numerous examples available in the
DotNetZip download, but we trying to create a utility that will do zipping and
emailing of the given folder. This
project should be extensible too.
You can download the library from url: http://dotnetzip.codeplex.com/
The project has been divided into the following parts:
Core Library (containing folder searching, zipping, emailing classes)
The development of the project was gone through Test Driven
Development. You can examine the unit
The core class involved here is the Zipper class:
The Zipper class consists of the properties:
The folder to zip for
Exclude the folders from zipping
Exclude the following file extensions from zipping
Contains the action items to be performed after ipping
The Zipper class contains the Zip() method which is the core
The Zip() method performs the following actions:
the Folder recursively and creates all files/folders list
the file/folder list to a temporary file using DotNetZp
the actions on zip file like Email, Copy etc.
the temporary zip file
the size of the zip file
// Ensure valid
folder is specified
throw new ArgumentException("Invalid Folder!");
// Get the files
var files =
_searcher.GetFiles(Folder, ExcludeFolders, ExcludeFileExtensions);
// Perform zip
using (ZipFile zipFile = new
(string file in
output zip file path
actions assigned (email, copy to folder etc.)
foreach (IAction action in this.AfterZipActions)
// Set file size for later reference
FileSize = new
// Delete the
original zip file
// Return true
The DotNetZip's ZipFile class is used to do the zipping
operation. The associated dll can be
found in the project's Library folder.
The Zipper class is designed in such a way that in future
the developer wanted to add a new action - it can be easily incorporated. For this purpose the IAction interface is
The interface contains the Perform() method. The IAction interface is implemented by the
Emailer and Copier classes. So in future
a new action is required, we can create the new class implementing the IAction
interface and add to the AfterZipActions list property of the Zipper class.
Gmail for Sending
As gmail is supporting smtp service, if the user is having a
gmail account it would be really easier.
Anyway other mail services are also supported as the mail parameters can
be changed over the screen. The changes
will be saved to config file back when the application exits.
The config file contains default values which can be
overridden by the end user.
xml version="1.0" encoding="utf-8" ?>
<add key="LatestFolder" value=""/>
<add key="ExcludeFolders" value="obj,bin;TestResults"/>
<add key="ExcludeFileExtensions" value="*.suo;*.zip"/>
<add key="SenderEmail" value=""/>
<add key="SenderPassword" value=""/>
<add key="SMTPServer" value="smtp.gmail.com"/>
<add key="Recipients" value=""/>
<add key="DestinationFolder" value=""/>
The recommended usage of the utility is to add to the Visual
Studio Tools>External Tools menu.
This would be lot easier in zipping the project while after development.