private static void AddDirectory(string directoryPath, ZipArchive archive, ZipContext context) { foreach (string filePath in TexoDirectory.GetFiles(directoryPath)) { AddFile(filePath, archive, context); } }
private static ModeledItem BuildOutput(ZipContext context) { Document document = new Document( new Header(context.DestinationZipFile.GetFileNameOrDirectoryName()), new Paragraph(new Core.Model.Text.Link( context.DestinationZipFile.GetFullPath(), ActionBuilder.PathOpenUri(context.DestinationZipFile.GetFullPath()))), new Section( new Header(2, "Content"), context.FileOutputList)); return(new ModeledItem(document)); }
private ICommandResult Zip(ZipContext context) { context.ZipAlreadyExists = File.Exists(context.DestinationZipFile); if (context.ZipAlreadyExists && !context.Add && !context.Override) { return(new ItemsResult( Item.AsMarkdown("The zip file already exists, use options `--override` or `--add`."))); } context.FileOutputList = new List(); try { using (FileStream zipStream = new FileStream(context.DestinationZipFile, FileMode.OpenOrCreate, FileAccess.ReadWrite)) using (ZipArchive archive = new ZipArchive(zipStream, ZipArchiveMode.Update)) { foreach (string path in context.Items) { switch (path.GetPathType()) { case PathTypeEnum.File: AddFile(path, archive, context); break; case PathTypeEnum.Directory: AddDirectory(path, archive, context); break; } } } if (context.FileOutputList.Items.Count < 1) { context.FileOutputList = context.FileOutputList.AddItem( new ListItem(new Italic("no new content added"))); } } catch (Exception exception) { const string message = "Zip archive error."; logger.Error(message, exception); return(new ErrorTextResult(message)); } return(new ItemsResult <ModeledItem>(BuildOutput(context))); }
private static void AddFile(string filePath, ZipArchive archive, ZipContext context) { if (!File.Exists(filePath)) { return; } bool flatten = context.Flat || !filePath.IsSubPathOf(context.SourceLobby); string destinationPath = flatten ? filePath.GetFileNameOrDirectoryName() : filePath.GetFriendlyPath(context.SourceLobby); ZipArchiveEntry fileEntry = archive.GetEntry(destinationPath); if (fileEntry != null && !context.Override) { return; } if (fileEntry == null) { if (context.ZipAlreadyExists && !context.Add) { return; } fileEntry = archive.CreateEntry(destinationPath); } context.FileOutputList = context.FileOutputList.AddItem( new ListItem(new Core.Model.Text.Link( destinationPath, ActionBuilder.PathOpenUri(filePath.GetFullPath())))); using (FileStream originalStream = new FileStream(filePath, FileMode.Open)) using (Stream targetStream = fileEntry.Open()) { originalStream.CopyTo(targetStream); } }
/// <summary> /// /// </summary> /// <param name="context"></param> public ZipService(ZipContext context) { _context = context; }
public ZipFileContentRepository(ZipContext context) { _context = context; }