public async Task <SourceRepository> FetchAllFiles(BuildConfig config) { var result = new SourceRepository(); using (System.Net.Http.HttpClient client = new System.Net.Http.HttpClient()) { using (var stream = await client.GetStreamAsync(config.SourceUrl)) { using (var fs = File.OpenWrite(zipFile)) { await stream.CopyToAsync(fs); } } } List <ISourceItem> files = result.Files; result.LatestVersion = HashService.Instance.ComputeHash(zipFile); using (ZipFile zip = new ZipFile(zipFile)) { foreach (ZipEntry entry in zip) { if (entry.IsDirectory) { continue; } using (var s = zip.GetInputStream(entry)) { string filePath = zipFolder + "\\" + entry.Name; FileInfo fi = new FileInfo(filePath); if (!fi.Directory.Exists) { fi.Directory.Create(); } using (FileStream fs = fi.OpenWrite()) { await fs.CopyToAsync(s); } string fileName = System.IO.Path.GetFileName(filePath); ZipSourceItem file = new ZipSourceItem { Url = filePath, Name = System.IO.Path.GetFileName(filePath), Folder = entry.Name.Substring(0, entry.Name.Length - fileName.Length), IsDirectory = false }; files.Add(file); } } } Parallel.ForEach(files, file => { ((ZipSourceItem)file).Version = HashService.Instance.ComputeHash(file.Url); }); return(result); }
public async Task<List<ISourceItem>> FetchAllFiles(BuildConfig config) { using (System.Net.Http.HttpClient client = new System.Net.Http.HttpClient()) { using (var stream = await client.GetStreamAsync(config.SourceUrl)) { using (var fs = File.OpenWrite(zipFile)) { await stream.CopyToAsync(fs); } } } List<ISourceItem> files = new List<ISourceItem>(); using (ZipFile zip = new ZipFile(zipFile)) { foreach (ZipEntry entry in zip) { if (entry.IsDirectory) continue; using (var s = zip.GetInputStream(entry)) { string filePath = zipFolder + "\\" + entry.Name; FileInfo fi = new FileInfo(filePath); if (!fi.Directory.Exists) { fi.Directory.Create(); } using (FileStream fs = fi.OpenWrite()) { await fs.CopyToAsync(s); } string fileName = System.IO.Path.GetFileName(filePath); ZipSourceItem file = new ZipSourceItem { Url = filePath, Name = System.IO.Path.GetFileName(filePath), Folder = entry.Name.Substring(0,entry.Name.Length-fileName.Length), IsDirectory = false }; files.Add(file); } } } var md5 = System.Security.Cryptography.MD5.Create(); Parallel.ForEach(files, file => { ((ZipSourceItem)file).Version = Convert.ToBase64String(md5.ComputeHash(File.ReadAllBytes(file.Url))); }); return files; }