public static void CopyEnvironmentSpecificFile(this ProtoServer s, string destination, string environment, string filename)
        {
            s.CopyFile(@".\..\environment.files\{0}\{0}.{1}".FormatWith(environment, filename))
                .ToDirectory(destination);

            s.RenameFile(@"{0}\{1}.{2}".FormatWith(destination, environment, filename))
                .To(filename);
        }
        public static Task CopyDirectoryAsync(this IsolatedStorageFile Iso, string SourceDirectory, string TargetDirectory, IProgress<int> Progress, bool OverWrite = false) {
            Contract.Requires(Iso != null);
            Contract.Requires(Progress != null);
            Contract.Requires(Iso.DirectoryExists(SourceDirectory), "Source Directory does not exist");

            return Task.Factory.StartNew(() => {
                Progress.Report(0);

                IList<string> relativeFilePaths;
                IList<string> relativeDirPaths;
                CollectSubdirectoriesAndFilesBreadthFirst(Iso, SourceDirectory, out relativeDirPaths, out relativeFilePaths);

                var totalElementCount =
                    relativeDirPaths.Count + //SubDirectories 
                    1 + //TargetDir
                    relativeFilePaths.Count; // Files

                var reporter = new PercentageReporter<int>(Progress, p => p, totalElementCount);

                var absoluteDirs = from relativeDir in relativeDirPaths
                                   select Path.Combine(TargetDirectory, relativeDir);

                foreach (var dir in Enumerable.Repeat(TargetDirectory, 1).Concat(absoluteDirs)) {
                    if (!Iso.DirectoryExists(dir)) {
                        Iso.CreateDirectory(dir);
                    }
                    reporter.Completed++;
                }

                foreach (var relativeFile in relativeFilePaths) {
                    var sourceFile = Path.Combine(SourceDirectory, relativeFile);
                    var targetFile = Path.Combine(TargetDirectory, relativeFile);

                    Iso.CopyFile(sourceFile, targetFile, OverWrite);
                    reporter.Completed++;
                }
            });
        }
 public static DirectoryInfo CopyFileWithOnTheFlyReplacement(this  DirectoryInfo di, DirectoryInfo toDir, Func<string, string> replacement, string file)
 {
     var newfile = di.CopyFile(file, toDir);
     newfile.ParseAndReplaceContent(replacement);
     return di;
 }
 public static IVirtualFile CopyFile(this IVirtualDirectory directory, IVirtualFile file)
 {
     return directory.CopyFile(file, file.Name);
 }