public static byte[] AddFileToFolder(Package package, PackageFolder folder, string fileName, byte[] fileContents) { byte[] ret = null; try { if (package.dj == null || (package.dj != null && package.dj.OpenAgain())) { try { if (package.package.CanWrite == false) package.package.OpenAgain(); if (package.package.CanWrite) { if (package.package.AddFileToFolder(folder.FolderEntry, fileName, fileContents)) { ret = package.package.RebuildPackageInMemory( new RSAParams(new DJsIO(Resources.KV, true))); } } } finally { package.package.CloseIO(); } } } catch { } return ret; }
public PackageFile(PackageFolder folder, FileEntry file, bool readData = true, Package pk = null) { this.FileEntry = file; this.Folder = folder; this.Package = pk; this.data = file.ExtractBytes(readData); }
internal PackageFolder(PackageFolder parent, FolderEntry entry, bool readData = true, Package pk = null) { this.FolderEntry = entry; Parent = parent; Package = pk; Files = new List<PackageFile>(); Folders = new List<PackageFolder>(); foreach (var f in entry.GetSubFiles()) { Files.Add(new PackageFile(this, f, readData, pk)); } foreach (var f in entry.GetSubFolders()) { Folders.Add(new PackageFolder(this, f, readData, pk)); } }
void GetSubFilesByName(PackageFolder folder, string fileName, ref List<PackageFile> ret) { foreach (var file in folder.Files) { if (string.Compare(file.Name,fileName,true)==0) { ret.Add(file); } } foreach (var subf in folder.Folders) { GetSubFilesByName(subf, fileName, ref ret); } }
void GetSubFiles(PackageFolder folder, string extension, ref List<PackageFile> ret) { var exts = extension.Split('|'); foreach (var file in folder.Files) { foreach (var ex in exts) { if (file.Name.EndsWith(ex, StringComparison.OrdinalIgnoreCase)) { ret.Add(file); } } } foreach (var subf in folder.Folders) { GetSubFiles(subf, extension, ref ret); } }
void ReadData(bool readData = true, Package pk = null) { rootFolder = new PackageFolder(null, package.RootDirectory, readData, pk); }
public bool AddPackageTreeNodes(TreeNodeCollection treeNode, PackageFolder folder) { bool ret = true; try { TreeNodeCollection nc = treeNode; if (string.IsNullOrEmpty(folder.Name) == false) { var n = nc.Add(folder.Name); n.Tag = folder; nc = n.Nodes; n.ImageKey = "XPFolder.gif"; n.SelectedImageKey = "OpenFolder.gif"; } foreach (PackageFile f in folder.Files) { var fn = nc.Add(f.Name); fn.Tag = f; var ext = Path.GetExtension(f.Name); if (ext.EndsWith("dta", StringComparison.OrdinalIgnoreCase) || ext.EndsWith("mid", StringComparison.OrdinalIgnoreCase) || ext.EndsWith("midi", StringComparison.OrdinalIgnoreCase)) { if (ext.EndsWith("dta", StringComparison.OrdinalIgnoreCase)) { fn.ImageKey = "file_extension_dll.png"; fn.SelectedImageKey = "file_extension_dll.png"; } else { fn.ImageKey = "document-music-playlist.png"; fn.SelectedImageKey = "document-music-playlist.png"; } var b = f.Data; Debug.WriteLine(f.Name + " : " + b.Length.ToString()); } else { fn.ImageKey = "file_extension_chm.png"; fn.SelectedImageKey = "file_extension_chm.png"; } } foreach (PackageFolder f in folder.Folders) { if (!AddPackageTreeNodes(nc, f)) ret = false; } } catch { ret = false; } return ret; }
public bool ExtractPackageContents(string localDirectory, PackageFolder folder, IEnumerable<string> filters) { var ret = true; try { localDirectory = localDirectory.AppendSlashIfMissing(); var files = folder.Files.Where(file => file.Data != null && (filters == null || filters.Any(filter => file.Name.EndsWithEx(filter)))); if (files.Any()) { localDirectory.AppendSlashIfMissing().CreateFolderIfNotExists(); foreach (var file in files) { localDirectory.PathCombine(file.Name).WriteFileBytes(file.Data); } } foreach (var subFolder in folder.Folders) { ExtractPackageContents(localDirectory.PathCombine(subFolder.Name).AppendSlashIfMissing(), subFolder, filters); } } catch { ret = false; } return ret; }