积极答复者
c#开发metro 文件zip解压缩

问题
答案
-
我这个例子,是一个完整的Metro解压缩ZIP文件的例子,并且可以自选保存目录。
private async void Button_Click_1(object sender, RoutedEventArgs e) { FileOpenPicker fop = new FileOpenPicker(); fop.FileTypeFilter.Add(".zip"); fop.SuggestedStartLocation = PickerLocationId.Desktop; fop.ViewMode = PickerViewMode.List; var zipfile = await fop.PickSingleFileAsync(); byte[] buffer = WindowsRuntimeBufferExtensions.ToArray(await FileIO.ReadBufferAsync(zipfile)); using (MemoryStream stream = new MemoryStream(buffer)) { ZipArchive zipArchive = new ZipArchive(stream, ZipArchiveMode.Read); FolderPicker fp = new FolderPicker(); //Add file types to the FolderPicker foreach (var zipArchiveEntry in zipArchive.Entries) { if (!zipArchiveEntry.FullName.EndsWith("/")) { string fileExtension = "." + Regex.Match(zipArchiveEntry.FullName, @"[^\.]\w+$").Value; if (!fp.FileTypeFilter.Contains(fileExtension)) fp.FileTypeFilter.Add(fileExtension); } } fp.SuggestedStartLocation = PickerLocationId.Desktop; fp.ViewMode = PickerViewMode.List; StorageFolder unzipfolder = await fp.PickSingleFolderAsync(); int progress = 0; foreach (var zipArchiveEntry in zipArchive.Entries) { if (!String.IsNullOrEmpty(zipArchiveEntry.FullName)) { if (!zipArchiveEntry.FullName.EndsWith("/")) { string fileName = zipArchiveEntry.FullName.Replace("/", "\\"); using (Stream fileData = zipArchiveEntry.Open()) { StorageFile newFile = await unzipfolder.CreateFileAsync(fileName, CreationCollisionOption.ReplaceExisting); using (IRandomAccessStream newFileStream = await newFile.OpenAsync(FileAccessMode.ReadWrite)) { using (Stream s = newFileStream.AsStreamForWrite()) { await fileData.CopyToAsync(s); await s.FlushAsync(); } } } } } progress++; progressBar.Value = progress * 100 / zipArchive.Entries.Count; } } }
Bob Bao [MSFT]
MSDN Community Support | Feedback to us
- 已建议为答案 john_shen 2012年7月27日 12:20
- 已标记为答案 Jie BaoModerator 2012年8月3日 11:33
全部回复
-
我这个例子,是一个完整的Metro解压缩ZIP文件的例子,并且可以自选保存目录。
private async void Button_Click_1(object sender, RoutedEventArgs e) { FileOpenPicker fop = new FileOpenPicker(); fop.FileTypeFilter.Add(".zip"); fop.SuggestedStartLocation = PickerLocationId.Desktop; fop.ViewMode = PickerViewMode.List; var zipfile = await fop.PickSingleFileAsync(); byte[] buffer = WindowsRuntimeBufferExtensions.ToArray(await FileIO.ReadBufferAsync(zipfile)); using (MemoryStream stream = new MemoryStream(buffer)) { ZipArchive zipArchive = new ZipArchive(stream, ZipArchiveMode.Read); FolderPicker fp = new FolderPicker(); //Add file types to the FolderPicker foreach (var zipArchiveEntry in zipArchive.Entries) { if (!zipArchiveEntry.FullName.EndsWith("/")) { string fileExtension = "." + Regex.Match(zipArchiveEntry.FullName, @"[^\.]\w+$").Value; if (!fp.FileTypeFilter.Contains(fileExtension)) fp.FileTypeFilter.Add(fileExtension); } } fp.SuggestedStartLocation = PickerLocationId.Desktop; fp.ViewMode = PickerViewMode.List; StorageFolder unzipfolder = await fp.PickSingleFolderAsync(); int progress = 0; foreach (var zipArchiveEntry in zipArchive.Entries) { if (!String.IsNullOrEmpty(zipArchiveEntry.FullName)) { if (!zipArchiveEntry.FullName.EndsWith("/")) { string fileName = zipArchiveEntry.FullName.Replace("/", "\\"); using (Stream fileData = zipArchiveEntry.Open()) { StorageFile newFile = await unzipfolder.CreateFileAsync(fileName, CreationCollisionOption.ReplaceExisting); using (IRandomAccessStream newFileStream = await newFile.OpenAsync(FileAccessMode.ReadWrite)) { using (Stream s = newFileStream.AsStreamForWrite()) { await fileData.CopyToAsync(s); await s.FlushAsync(); } } } } } progress++; progressBar.Value = progress * 100 / zipArchive.Entries.Count; } } }
Bob Bao [MSFT]
MSDN Community Support | Feedback to us
- 已建议为答案 john_shen 2012年7月27日 12:20
- 已标记为答案 Jie BaoModerator 2012年8月3日 11:33
-
据我所知 ,没有支持rar的 Metro的库。
Bob Bao [MSFT]
MSDN Community Support | Feedback to us
-
压缩 ,参考帖子 : http://social.msdn.microsoft.com/Forums/en-us/winappswithcsharp/thread/427f4655-6dd4-4472-8c87-36e97eea74d3
Bob Bao [MSFT]
MSDN Community Support | Feedback to us
- 已建议为答案 Jie BaoModerator 2012年8月7日 5:17
-
应用在我们设定了权限后,仅可以默认访问 系统库中的文件, 应用数据目录下的文件, 移动设备上的文件和只读模式访问应用安装目录下的文件.
如果要其它位置的文件,必须通过FilePicker 来让用户选取。所以你不能直接给一个其它位置的连接让应用读取。
应用对于他自己的运行目录只有只读权限,我建议你将你的数据保存到 ApplicationData 的 LocalFolder 或者 RoamingFolder下,这个目录 在你的 系统 C:\Users\[your name]\AppData\Local\Packages\[your app family name] 注意,AppData默认是隐藏目录。
Bob Bao
Do you still use the same Windows 8 LockScreen always? Download Chameleon Win8 App quickly, that changes your LockScreen constantly.
你是否还在看着一成不变的Windows 8锁屏而烦恼,赶紧下载这个 百变锁屏 应用,让你的锁屏不断地变化起来。- 已建议为答案 09soft 2013年3月22日 2:14