Win8 metro Zip

来源:互联网 发布:sql怎么统计班级人数 编辑:程序博客网 时间:2024/05/29 04:03
public class ZipHelper {    public async static Task CreateFromFolder(StorageFolder sourceFolder, StorageFile destinationFile, bool removeSourceFolder = true) {        using (var fileStream = await destinationFile.OpenAsync(FileAccessMode.ReadWrite)) {             using (var zipArchive = new ZipArchive(fileStream.AsStreamForWrite(), ZipArchiveMode.Update)) {await ZipFolder(sourceFolder, zipArchive, sourceFolder.Path);                if (removeSourceFolder) {                    await sourceFolder.DeleteAsync();                }             }        }    }    public async static Task ExtractToFolder(StorageFile sourceFile, StorageFolder destinationFolder) {        using (var zipStream = (await sourceFile.OpenReadAsync()).AsStreamForRead()) {            using (var zipArchive = new ZipArchive(zipStream, ZipArchiveMode.Read)) {foreach (var entry in zipArchive.Entries.Where(entry => !string.IsNullOrEmpty(entry.Name))) {    using (var fileData = entry.Open()) {        var outputFile = await destinationFolder.CreateFileAsync(entry.FullName, CreationCollisionOption.ReplaceExisting);        using (var outputFileStream = await outputFile.OpenStreamForWriteAsync()) {            await fileData.CopyToAsync(outputFileStream);            await fileData.FlushAsync();        }    }}            }        }    }    private async static Task ZipFolder(StorageFolder sourceFolder, ZipArchive zipArchive, string baseDirPath) {        var files = await sourceFolder.GetFilesAsync();        foreach (var file in files) {    var fileEntry = zipArchive.CreateEntry(GetCompressedFileName(baseDirPath, file));            var buffer = (await FileIO.ReadBufferAsync(file)).ToArray();            using (var entryStream = fileEntry.Open()) {                await entryStream.WriteAsync(buffer, 0, buffer.Length);            }        }        var subFolders = await sourceFolder.GetFoldersAsync();        if (!subFolders.Any()) return;        foreach (var folder in subFolders) {            await ZipFolder(folder, zipArchive,baseDirPath);        }    }    private static string GetCompressedFileName(string baseDirPath, StorageFile file) {        return file.Path.Remove(0, baseDirPath.Length);    }}


抄自这里,略做修改

原创粉丝点击