예제 #1
0
        /// <summary>
        /// 压缩(支持 zip、rar、7z),默认zip
        /// </summary>
        /// <param name="dirPath">需要压缩的目录</param>
        /// <param name="zipFile">文件的绝对路径,如果不指定,将保存到当前压缩的目录下</param>
        public static string Zip(string dirPath, string zipFile = "")
        {
            if (!Directory.Exists(dirPath))
            {
                throw new DirectoryNotFoundException("参数[dirPath]不是一个有效的文件夹路径");
            }

            if (!zipFile.IsNullOrEmpty() && !(new string[] { ".zip", ".rar", ".7z" }.Contains(Path.GetExtension(zipFile).ToLower())))
            {
                throw new DirectoryNotFoundException("文件名格式不正确");
            }

            if (zipFile.IsNullOrEmpty())
            {
                zipFile = FileUtils.Combine(dirPath, StringUtils.GetNewFileName() + ".zip");
            }

            //解决中文乱码问题
            var options = new SharpCompress.Writers.WriterOptions(CompressionType.Deflate)
            {
                ArchiveEncoding = new ArchiveEncoding
                {
                    Default = Encoding.GetEncoding("utf-8")
                }
            };

            using (var archive = ZipArchive.Create())
            {
                archive.AddAllFromDirectory(dirPath);
                archive.SaveTo(zipFile, options);

                return(zipFile);
            }
        }
예제 #2
0
        /// <summary>
        /// Compress exported data
        /// </summary>
        /// <returns>Process results model</returns>
        public Models.Common.ProcessResultModel Compress()
        {
            var stopwatch = new System.Diagnostics.Stopwatch();

            if (this.Config.Format == "d" && this.Config.TarDir)
            {
                stopwatch.Start();

                // Compress
                using (var archive = TarArchive.Create())
                {
                    var mode = new SharpCompress.Writers.WriterOptions(SharpCompress.Common.CompressionType.None);
                    archive.AddAllFromDirectory(this.File);
                    archive.SaveTo(this.File + ".tar", mode);
                }

                // Delete
                Directory.Delete(this.File, true);
                this.File += ".tar";

                stopwatch.Stop();
            }

            return(new Models.Common.ProcessResultModel()
            {
                Duartion = stopwatch.Elapsed
            });
        }
예제 #3
0
        /// <summary>
        /// 压缩文件夹
        /// </summary>
        /// <param name="fromFileDirectory">压缩文件夹路径</param>
        /// <param name="outFilePath">压缩后路径</param>
        public static void Zips(string fromFileDirectory, string outFilePath)
        {
            //解决中文乱码问题
            SharpCompress.Common.ArchiveEncoding ArchiveEncoding = new SharpCompress.Common.ArchiveEncoding();
            ArchiveEncoding.Default = Encoding.GetEncoding("utf-8");
            SharpCompress.Writers.WriterOptions options = new SharpCompress.Writers.WriterOptions(CompressionType.Deflate);
            options.ArchiveEncoding = ArchiveEncoding;

            using (var archive = ZipArchive.Create())
            {
                archive.AddAllFromDirectory(fromFileDirectory);
                using (var zip = File.OpenWrite(outFilePath))
                    archive.SaveTo(zip, options);
            }
        }
예제 #4
0
        /// <summary>
        /// Compress directory with Tar to file-system
        /// </summary>
        /// <param name="path">Path </param>
        /// <returns>Path to archive</returns>
        public static string Compress(string path)
        {
            if (Generics.StringExtensions.IsEmpty(path))
            {
                return(string.Empty);
            }

            using (var archive = TarArchive.Create())
            {
                var gzip = new SharpCompress.Writers.WriterOptions(SharpCompress.Common.CompressionType.GZip);
                path = path.Trim().TrimEnd('.');
                archive.AddAllFromDirectory(path);
                archive.SaveTo(path + ".tar.gz", gzip);
                return(path + ".tar.gz");
            }
        }
예제 #5
0
        public static void ExportWord(string outputPath, string outputFile, IEnumerable <Datas> datases)
        {
            //先确定文件数
            //根据测区来分文件
            var           files    = datases.GroupBy(a => a.Regionalcode);
            var           datetime = DateTime.Now;
            string        date     = datetime.Year.ToString() + datetime.Month.ToString("00") + datetime.Day.ToString("00");
            List <string> outFiles = new List <string>();

            foreach (var f in files)
            {
                string filename = string.Format("{0}-加密锁授权申请表-{1}-{2}.doc", date, f.ElementAt(0).Compname, f.ElementAt(0).Regionalname);
                var    destFile = Path.Combine(outputPath, filename);

                outFiles.Add(destFile);              //将输出文件路径存放

                File.Copy(modelDoc, destFile, true); //复制文件
                var datas = f.ElementAt(0).Clone() as Datas;
                //合并软件名称
                string softs = string.Empty;
                var    gp    = f.GroupBy(a => a.Softwarename);
                foreach (var g in gp)
                {
                    softs += g.Key + ",";
                }
                softs = softs.TrimEnd(',');
                datas.Softwarename = softs;
                Document        doc = new Document(destFile);
                DocumentBuilder db  = new DocumentBuilder(doc);
                WriteDoc(doc, db, datas);
                //锁编号
                string dogCode = string.Empty;
                foreach (var d in f)
                {
                    dogCode += d.Dogcode + ";";
                }
                dogCode = dogCode.TrimEnd(';');
                db.MoveToBookmark("dogcode");
                var run = new Run(doc, dogCode);
                run.Font.Size  = 14;
                run.Font.Color = System.Drawing.Color.Blue;
                db.InsertNode(run);
                //备注
                string remark = string.Empty;
                //区分新领取和非新领取的
                var newget = f.Where(p => p.Servicetype.Contains("新领取"));
                var oldget = f.Except(newget);
                //处理新领取的情况
                var services = newget.GroupBy(a => a.Servicetype);
                foreach (var s in services)
                {
                    var softtypes = s.GroupBy(a => a.Softwarename);
                    foreach (var st in softtypes)
                    {
                        var dogt = st.GroupBy(a => a.Dogtype);
                        foreach (var d in dogt)
                        {
                            remark += string.Format("{0}{1}{2}个({3});", s.Key, d.Key, d.Count(), st.Key);
                        }
                    }
                }

                var dt = oldget.GroupBy(a => a.Dogtype);
                foreach (var d in dt)
                {
                    var st = d.GroupBy(a => a.Servicetype);
                    foreach (var s in st)
                    {
                        remark += string.Format("{0}{1}{2}个;", d.Key, s.Key, s.Count());
                    }
                }
                remark = remark.TrimEnd(';');
                db.MoveToBookmark("remark");
                db.InsertNode(new Run(doc, remark));
                doc.Save(destFile, Aspose.Words.SaveFormat.Doc);
            }
            //将文件压缩
            string output = Path.Combine(outputPath, outputFile);
            Stream dst    = new FileStream(output, FileMode.Create);
            //解决中文乱码问题
            ArchiveEncoding ArchiveEncoding = new ArchiveEncoding();

            ArchiveEncoding.Default = Encoding.GetEncoding("utf-8");
            SharpCompress.Writers.WriterOptions options = new SharpCompress.Writers.WriterOptions(CompressionType.Deflate);
            options.ArchiveEncoding = ArchiveEncoding;

            using (var archive = ZipArchive.Create())
            {
                foreach (var f in outFiles)
                {
                    FileInfo fi = new FileInfo(f);
                    archive.AddEntry(fi.Name, fi.OpenRead(), true);
                }
                archive.SaveTo(dst, options);
                dst.Close();
            }
            dst.Dispose();
            //删除生成的单个文件
            foreach (var f in outFiles)
            {
                File.Delete(f);
            }
        }