示例#1
0
文件: MainForm.cs 项目: ctddjyds/npoi
        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;
        }
示例#3
0
        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);
        }
示例#4
0
        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;
        }
示例#6
0
        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();
            }
            
        }