コード例 #1
0
        private void MakePack(string save)
        {
            //TODO: 打包脚本
            CantStop = true;
            MainWindowVM.ShowStatus("打包...扫描文件");
            fileCount = fileCount ?? GetAllFileCount();
            var count = 0;
            //排除的文件和目录(包含版本文件)
            var fileFilter = string.Join(";",
                                         IgnoreHashs.Where(i => !i.EndsWith("/") && !i.Equals(VersionFileName))
                                         .Select(i => $"-^{(PackFolder + "\\" + i).ToRegPattern()}$"));
            var dirFilter = string.Join(";",
                                        IgnoreHashs.Where(i => i.EndsWith("/"))
                                        .Select(i => $"-^{(PackFolder + "\\" + i.TrimEnd('/')).ToRegPattern()}$"));
            //压缩
            var evt = new FastZipEvents
            {
                CompletedFile    = (sender, e) => count++,
                ProcessFile      = (sender, e) => MainWindowVM.ShowStatus("打包..." + e.Name.Remove(0, PackFolder.Length + 1), true, count * 100 / fileCount),
                ProgressInterval = TimeSpan.FromSeconds(1)
            };
            var fast = new FastZip(evt)
            {
                Password = Password
            };

            MainWindowVM.BeginStatusInterval();
            fast.CreateZip(save, PackFolder, true, fileFilter, dirFilter);
            MainWindowVM.EndStatusInterval();
            MainWindowVM.ShowStatus("打包...完成");
            CantStop = false;
            return;
        }
コード例 #2
0
        private List <string> GetAllFiles()
        {
            //1.取顶层文件
            var files = Directory.GetFiles(PackFolder)
                        .Where(f => !IgnoreHashs.Any(i => f.Equals($@"{PackFolder}\{i}", StringComparison.OrdinalIgnoreCase)))
                        .ToList();
            //2.取顶层目录
            var dirs = Directory.GetDirectories(PackFolder)
                       .Where(d => !IgnoreHashs.Any(i => $"{d}/".Equals($@"{PackFolder}\{i}", StringComparison.OrdinalIgnoreCase)))
                       .ToList();

            //3.取子目录文件
            foreach (var dir in dirs)
            {
                if (_tokenSource.IsCancellationRequested)
                {
                    return(null);
                }
                files.AddRange(Directory.GetFiles(dir, "*", SearchOption.AllDirectories));
            }
            return(files);
        }