private void AddDirectory(string path) { List<ZipEntryData> childList = roots; string[] dirNames = path.Split(new char[] { Path.DirectorySeparatorChar }, StringSplitOptions.RemoveEmptyEntries); string key = string.Empty; ZipEntryData data; foreach (string dir in dirNames) { key = string.IsNullOrEmpty(key) ? dir : key + Path.DirectorySeparatorChar + dir; if (dicDatas.ContainsKey(key)) { data = dicDatas[key]; childList = data.ChildData; continue; } data = new ZipEntryData(); data.Type = ZipEntryType.Directory; data.Name = dir; dicDatas.Add(key, data); childList.Add(data); childList = data.ChildData; } }
public List<SyncItem> LoadItems() { var items = new List<SyncItem>(); using (new SecurityDisabler()) { using (new ProxyDisabler()) { var reader = new ZipReader(PackagePath, Encoding.UTF8); ZipEntry entry = reader.GetEntry("package.zip"); using (var stream = new MemoryStream()) { StreamUtil.Copy(entry.GetStream(), stream, 0x4000); reader = new ZipReader(stream); foreach (ZipEntry zipEntry in reader.Entries) { var entryData = new ZipEntryData(zipEntry); try { if (entryData.Key.EndsWith("/xml")) { string xml = new StreamReader(entryData.GetStream().Stream, Encoding.UTF8).ReadToEnd(); if (!string.IsNullOrWhiteSpace(xml)) { XmlDocument document = XmlUtil.LoadXml(xml); if (document != null) { SyncItem loadedItem = LoadItem(document); if (loadedItem != null) { items.Add(loadedItem); } } } } } catch (Exception) { Console.WriteLine("Unable to load xml from file {0}", entryData.Key); } } } } } Console.WriteLine("Read {0} items from package {1}", items.Count, PackagePath); return items; }
public List <SyncItem> LoadItems() { var items = new List <SyncItem>(); using (new SecurityDisabler()) { using (new ProxyDisabler()) { var reader = new ZipReader(PackagePath, Encoding.UTF8); ZipEntry entry = reader.GetEntry("package.zip"); using (var stream = new MemoryStream()) { StreamUtil.Copy(entry.GetStream(), stream, 0x4000); reader = new ZipReader(stream); foreach (ZipEntry zipEntry in reader.Entries) { var entryData = new ZipEntryData(zipEntry); try { if (entryData.Key.EndsWith("/xml")) { string xml = new StreamReader(entryData.GetStream().Stream, Encoding.UTF8).ReadToEnd(); if (!string.IsNullOrWhiteSpace(xml)) { XmlDocument document = XmlUtil.LoadXml(xml); if (document != null) { SyncItem loadedItem = LoadItem(document); if (loadedItem != null) { items.Add(loadedItem); } } } } } catch (Exception) { Console.WriteLine("Unable to load xml from file {0}", entryData.Key); } } } } } Console.WriteLine("Read {0} items from package {1}", items.Count, PackagePath); return(items); }
public PackageManifest GetManifest(string filename) { var manifest = new PackageManifest(); ZipReader reader; try { reader = new ZipReader(filename, Encoding.UTF8); } catch (Exception exception) { throw new InvalidOperationException("Failed to open package", exception); } string tempFileName = Path.GetTempFileName(); ZipEntry entry = reader.GetEntry("package.zip"); if (entry != null) { using (FileStream stream = File.Create(tempFileName)) { StreamUtil.Copy(entry.GetStream(), stream, 0x4000); } reader.Dispose(); reader = new ZipReader(tempFileName, Encoding.UTF8); } try { foreach (ZipEntry entry2 in reader.Entries) { var data = new ZipEntryData(entry2); var packageManifestEntry = ZipEntryDataParser.GetManifestEntry(data.Key); if (!(packageManifestEntry is PackageManifestEntryNotFound)) { manifest.Entries.Add(packageManifestEntry); } } } finally { reader.Dispose(); File.Delete(tempFileName); } return(manifest); }
public PackageManifest GetManifest(string filename) { var manifest = new PackageManifest(); ZipReader reader; try { reader = new ZipReader(filename, Encoding.UTF8); } catch (Exception exception) { throw new InvalidOperationException("Failed to open package", exception); } string tempFileName = Path.GetTempFileName(); ZipEntry entry = reader.GetEntry("package.zip"); if (entry != null) { using (FileStream stream = File.Create(tempFileName)) { StreamUtil.Copy(entry.GetStream(), stream, 0x4000); } reader.Dispose(); reader = new ZipReader(tempFileName, Encoding.UTF8); } try { foreach (ZipEntry entry2 in reader.Entries) { var data = new ZipEntryData(entry2); var packageManifestEntry = ZipEntryDataParser.GetManifestEntry(data.Key); if (! (packageManifestEntry is PackageManifestEntryNotFound)) { manifest.Entries.Add(packageManifestEntry); } } } finally { reader.Dispose(); File.Delete(tempFileName); } return manifest; }
private void ShowDocPartTree(TreeView tv) { string fileDir = string.Empty; if (openFileDialog.ShowDialog() == DialogResult.OK) { roots.Clear(); dicDatas.Clear(); string rootFile = " "; try { //读取压缩文件(zip文件),准备解压缩 ZipInputStream s = new ZipInputStream(File.OpenRead(openFileDialog.FileName)); ZipEntry theEntry; string path = fileDir; //解压出来的文件保存的路径 string rootDir = " "; //根目录下的第一个子文件夹的名称 while ((theEntry = s.GetNextEntry()) != null) { rootDir = Path.GetDirectoryName(theEntry.Name); //得到根目录下的第一级子文件夹的名称 if (rootDir.IndexOf("\\") >= 0) { rootDir = rootDir.Substring(0, rootDir.IndexOf("\\") + 1); } string dir = Path.GetDirectoryName(theEntry.Name); //根目录下的第一级子文件夹的下的文件夹的名称 string fileName = Path.GetFileName(theEntry.Name); //根目录下的文件名称 if (dir != " ") //创建根目录下的子文件夹,不限制级别 { //if (!Directory.Exists(fileDir + "\\" + dir)) //{ // path = fileDir + "\\" + dir; // //在指定的路径创建文件夹 // Directory.CreateDirectory(path); //} AddDirectory(dir); } else if (dir == " " && fileName != "") //根目录下的文件 { path = fileDir; rootFile = fileName; } else if (dir != " " && fileName != "") //根目录下的第一级子文件夹下的文件 { if (dir.IndexOf("\\") > 0) //指定文件保存的路径 { path = fileDir + "\\" + dir; } } if (dir == rootDir) //判断是不是需要保存在根目录下的文件 { path = fileDir + "\\" + rootDir; } //以下为解压缩zip文件的基本步骤 //基本思路就是遍历压缩文件里的所有文件,创建一个相同的文件。 if (fileName != String.Empty) { string text = GetFileData(s); List<ZipEntryData> childData = FindParentData(dir); ZipEntryData zdata = new ZipEntryData() { Type = ZipEntryType.File, Name = fileName, Content = text }; childData.Add(zdata); dicDatas.Add(theEntry.Name, zdata); } } s.Close(); } catch (Exception) { } tv.Nodes.Clear(); BuildDocPartTree(roots, tv.Nodes); tv.ExpandAll(); } }