public static void CopyDirectory(this IDirectory source, IDirectory dest, IProgressReport logger = null, CreateFileOptions options = CreateFileOptions.None) { IFileSystem sourceFs = source.ParentFileSystem; IFileSystem destFs = dest.ParentFileSystem; foreach (DirectoryEntry entry in source.Read()) { string subSrcPath = PathTools.Normalize(source.FullPath + '/' + entry.Name); string subDstPath = PathTools.Normalize(dest.FullPath + '/' + entry.Name); if (entry.Type == DirectoryEntryType.Directory) { destFs.CreateDirectory(subDstPath); IDirectory subSrcDir = sourceFs.OpenDirectory(subSrcPath, OpenDirectoryMode.All); IDirectory subDstDir = destFs.OpenDirectory(subDstPath, OpenDirectoryMode.All); subSrcDir.CopyDirectory(subDstDir, logger, options); } if (entry.Type == DirectoryEntryType.File) { destFs.CreateFile(subDstPath, entry.Size, options); using (IFile srcFile = sourceFs.OpenFile(subSrcPath, OpenMode.Read)) using (IFile dstFile = destFs.OpenFile(subDstPath, OpenMode.Write | OpenMode.Append)) { logger?.LogMessage(subSrcPath); srcFile.CopyTo(dstFile, logger); } } } }
public static void CopyFileSystem(this IFileSystem source, IFileSystem dest, IProgressReport logger = null, CreateFileOptions options = CreateFileOptions.None) { IDirectory sourceRoot = source.OpenDirectory("/", OpenDirectoryMode.All); IDirectory destRoot = dest.OpenDirectory("/", OpenDirectoryMode.All); sourceRoot.CopyDirectory(destRoot, logger, options); }
private void SynchronizeDirectory(string dest, string src) { if (BaseFs.DirectoryExists(dest)) { BaseFs.DeleteDirectoryRecursively(dest); } BaseFs.CreateDirectory(dest); IDirectory sourceDir = BaseFs.OpenDirectory(src, OpenDirectoryMode.All); IDirectory destDir = BaseFs.OpenDirectory(dest, OpenDirectoryMode.All); sourceDir.CopyDirectory(destDir); }