private async Task <List <ImportFileItem> > GetFilesInArchive(SkyDriveItemType parentType, IStorageFile file) { List <ImportFileItem> listItems = new List <ImportFileItem>(); if (file != null) { IRandomAccessStream accessStream = await file.OpenReadAsync(); Stream s = accessStream.AsStreamForRead((int)accessStream.Size); //get list of file IArchive archive = null; if (parentType == SkyDriveItemType.Rar) { archive = SharpCompress.Archive.Rar.RarArchive.Open(s); } else if (parentType == SkyDriveItemType.Zip) { archive = SharpCompress.Archive.Zip.ZipArchive.Open(s); } else if (parentType == SkyDriveItemType.SevenZip) { archive = SharpCompress.Archive.SevenZip.SevenZipArchive.Open(s); } foreach (var entry in archive.Entries) { if (!entry.IsDirectory) { Stream data = new MemoryStream(); entry.WriteTo(data); data.Position = 0; String name = entry.FilePath; SkyDriveItemType type = SkyDriveItemType.File; int dotIndex = -1; if ((dotIndex = name.LastIndexOf('.')) != -1) { String substrName = name.Substring(dotIndex).ToLower(); type = SkyDriveImportPage.GetSkyDriveItemType(substrName); } if (type == SkyDriveItemType.File) { data.Close(); continue; } ImportFileItem listItem = new ImportFileItem() { Name = name, Type = type, Stream = data }; listItems.Add(listItem); } } //close the zip stream since we have the stream of each item inside it already s.Close(); s = null; } return(listItems); }
private List <SDCardListItem> GetFilesInArchive(SDCardListItem item) { List <SDCardListItem> listItems = new List <SDCardListItem>(); if (item.Stream != null) { //fix SD card stream bug Stream s = new MemoryStream(); item.Stream.CopyTo(s); s.Position = 0; item.Stream.Close();// close because we copy it to s already item.Stream = null; //get list of file IArchive archive = null; if (item.Type == SkyDriveItemType.Rar) { archive = SharpCompress.Archive.Rar.RarArchive.Open(s); } else if (item.Type == SkyDriveItemType.Zip) { archive = SharpCompress.Archive.Zip.ZipArchive.Open(s); } else if (item.Type == SkyDriveItemType.SevenZip) { archive = SharpCompress.Archive.SevenZip.SevenZipArchive.Open(s); } foreach (var entry in archive.Entries) { if (!entry.IsDirectory) { Stream data = new MemoryStream(); entry.WriteTo(data); data.Position = 0; String name = entry.FilePath; SkyDriveItemType type = SkyDriveItemType.File; int dotIndex = -1; if ((dotIndex = name.LastIndexOf('.')) != -1) { String substrName = name.Substring(dotIndex).ToLower(); type = SkyDriveImportPage.GetSkyDriveItemType(substrName); } if (type == SkyDriveItemType.File) { data.Close(); continue; } SDCardListItem listItem = new SDCardListItem() { Name = name, Type = type, isFolder = false, ParentPath = item.ThisFile.Path, Stream = data }; listItems.Add(listItem); } } //close the zip stream since we have the stream of each item inside it already s.Close(); } return(listItems); }