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; }
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); }