1. Create a new empty SharePoint 2010 project
2. Create the following class (make sure the folders specified have been created:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using Microsoft.SharePoint.Administration; using System.IO; namespace HotFolderJob { public class FileMoverJob : SPJobDefinition { #region Constructors //Constructor public FileMoverJob() : base() { } //Constructor public FileMoverJob(string name, SPWebApplication webApp) : base(name, webApp, null, SPJobLockType.ContentDatabase) { this.Title = "Hotfolder Timer Job"; } #endregion Constructors #region Methods - Overridden public override void Execute(Guid targetInstanceId) { const string sourcePath = @"C:\TimerJob\DropFolder"; const string targetPath = @"C:\TimerJob\TargetFolder"; if (System.IO.Directory.Exists(sourcePath)) { string[] fullPathFiles = System.IO.Directory.GetFiles(sourcePath); foreach (string fullPathfile in fullPathFiles) { var originalFileName = Path.GetFileName(fullPathfile); var destFile = Path.Combine(targetPath, (string.Format("{0:yyMMdd_Hmmss}_", DateTime.Now) + originalFileName)); File.Move(fullPathfile, destFile); //File.Copy(fullPathfile, destFile); } } } #endregion Methods - Overridden } }3. Add a feature, name it as you please
4. Add an event receiver to it and define the activated/deactivated methods as follows:
using System; using System.Runtime.InteropServices; using System.Security.Permissions; using Microsoft.SharePoint; using Microsoft.SharePoint.Security; using Microsoft.SharePoint.Administration; namespace HotFolderJob.Features.HotfolderFeature { [Guid("a2bb921d-dda5-4f0c-923c-da8004a4b09a")] public class HotfolderFeatureEventReceiver : SPFeatureReceiver { const string JOB_NAME = "HotFolderJob"; public override void FeatureActivated(SPFeatureReceiverProperties properties) { SPSite site = properties.Feature.Parent as SPSite; foreach (SPJobDefinition job in site.WebApplication.JobDefinitions) { if (job.Name == JOB_NAME) job.Delete(); } FileMoverJob fileMoverJob = new FileMoverJob(JOB_NAME, site.WebApplication); SPMinuteSchedule schedule = new SPMinuteSchedule(); schedule.BeginSecond = 0; schedule.EndSecond = 59; schedule.Interval = 1; fileMoverJob.Schedule = schedule; fileMoverJob.Update(); } public override void FeatureDeactivating(SPFeatureReceiverProperties properties) { SPSite site = properties.Feature.Parent as SPSite; foreach (SPJobDefinition job in site.WebApplication.JobDefinitions) { if (job.Name == JOB_NAME) job.Delete(); } } //public override void FeatureInstalled(SPFeatureReceiverProperties properties) //{ //} //public override void FeatureUninstalling(SPFeatureReceiverProperties properties) //{ //} //public override void FeatureUpgrading(SPFeatureReceiverProperties properties, string upgradeActionName, System.Collections.Generic.IDictionary<string, string> parameters) //{ //} } }5. Set the feature scope to Site (applies for this example)
6. Deploy and see the magic happen