public static void ExtractStreamToFileSystem(this Stream compressedStream, IFileSystemWriter writer) { using (var zipInputStream = new ZipInputStream(compressedStream)) { foreach (var currentEntry in zipInputStream.ToList()) { string entryDirectory = Path.GetDirectoryName(currentEntry.Name); string entryFileName = Path.GetFileName(currentEntry.Name); if (entryDirectory.Length > 0) writer.CreateDirectory(entryDirectory); if (string.IsNullOrEmpty(entryFileName)) continue; writer.CreateFile(zipInputStream, Path.Combine(entryDirectory, entryFileName)); } } }
public static void ExtractStreamToFileSystem(this Stream compressedStream, IFileSystemWriter writer) { using (var zipInputStream = new ZipInputStream(compressedStream)) { foreach (var currentEntry in zipInputStream.ToList()) { string entryDirectory = Path.GetDirectoryName(currentEntry.Name); string entryFileName = Path.GetFileName(currentEntry.Name); if (entryDirectory.Length > 0) { writer.CreateDirectory(entryDirectory); } if (string.IsNullOrEmpty(entryFileName)) { continue; } writer.CreateFile(zipInputStream, Path.Combine(entryDirectory, entryFileName)); } } }
/// <summary> /// Copies all files and directories to the specified file system. /// </summary> /// <param name="sourceFileSystem">The file system to query.</param> /// <param name="destinationFileSystem">The file system to copy to.</param> public static void CopyAllTo( this IFileSystemReader sourceFileSystem, IFileSystemWriter destinationFileSystem ) { Ensure.Debug(sourceFileSystem, f => f.NotNull()); Ensure.That(destinationFileSystem).NotNull(); foreach( var dir in sourceFileSystem.GetDirectoryNamesRecursively() ) destinationFileSystem.CreateDirectory(dir); foreach( var file in sourceFileSystem.GetFileNamesRecursively() ) { var sourceStream = sourceFileSystem.ReadBinary(file); var destinationStream = destinationFileSystem.CreateNewBinary(file, overwriteIfExists: true); sourceStream.CopyTo(destinationStream); sourceStream.Close(); destinationStream.Close(); } }