/// <summary> /// 選択されたアイテムを外部ファイルに保存する. /// </summary> /// <returns></returns> private async Task ExportItemsAsync() { var items = GetSelectedItems(); if (items == null) { return; } var picker = new Windows.Storage.Pickers.FileSavePicker(); picker.FileTypeChoices.Add("zip", new string[] { ".zip" }); var file = await picker.PickSaveFileAsync(); if (file == null) { return; } this.ItemsChanging = true; using (var zipArchive = await ZipArchiveHelper.CreateZipArchiveFromFileAsync(file, System.IO.Compression.ZipArchiveMode.Create)) { foreach (var item in items) { await item.ExportAsync(zipArchive); } } this.ItemsChanging = false; }
/// <summary> /// 手描き入力を外部に保存する. /// </summary> /// <param name="targetArchive">保存先のZipArchive</param> /// <returns></returns> public async Task ExportAsync(System.IO.Compression.ZipArchive targetArchive) { if (targetArchive == null) { throw new ArgumentNullException("targetArchive"); } var folder = await ApplicationData.Current.LocalFolder.GetFolderAsync(this.InternalName); await ZipArchiveHelper.AddEntriesFromFolderAsync(targetArchive, folder); var propertyText = SerializeProperties(); await ZipArchiveHelper.AddEntriesFromTextAsync(targetArchive, String.Format(PropertyEntryNameFormat, this.InternalName), propertyText, Encoding.UTF8); }
/// <summary> /// 外部に保存した手描き入力を読み込む. /// </summary> /// <param name="sourceArchive"></param> /// <returns></returns> public static async Task ImportAsync(System.IO.Compression.ZipArchive sourceArchive) { if (sourceArchive == null) { throw new ArgumentNullException("sourceArchive"); } var workdir = await ApplicationData.Current.TemporaryFolder.CreateFolderAsync("ItemImport", CreationCollisionOption.ReplaceExisting); await ZipArchiveHelper.ExtractFromFileAsync(sourceArchive, workdir); var itemsDir = await workdir.GetFoldersAsync(); foreach (var itemDir in itemsDir) { var item = new CanvasItem(); if (!await item.SaveAsync()) { continue; } var propertyFile = (await workdir.TryGetItemAsync(String.Format(PropertyEntryNameFormat, itemDir.Name))) as StorageFile; if (propertyFile == null) { continue; } var propertyText = await FileIO.ReadTextAsync(propertyFile, Windows.Storage.Streams.UnicodeEncoding.Utf8); item.DeserializeProperties(propertyText); await propertyFile.DeleteAsync(); var newItemDir = await ApplicationData.Current.LocalFolder.GetFolderAsync(item.InternalName); foreach (var file in await itemDir.GetFilesAsync()) { await file.MoveAsync(newItemDir, file.Name, NameCollisionOption.ReplaceExisting); } if (!await item.LoadAsync()) { continue; } await CanvasItemManager.Current.AddItemAsync(item); } await workdir.DeleteAsync(); }
/// <summary> /// 外部ファイルに保存されたアイテムを読み込む. /// </summary> /// <returns></returns> private async Task ImportItemsAsync() { var picker = new Windows.Storage.Pickers.FileOpenPicker(); picker.FileTypeFilter.Add(".zip"); var file = await picker.PickSingleFileAsync(); if (file == null) { return; } this.ItemsChanging = true; using (var zipArchive = await ZipArchiveHelper.CreateZipArchiveFromFileAsync(file, System.IO.Compression.ZipArchiveMode.Read)) { await CanvasItem.ImportAsync(zipArchive); } this.ItemsChanging = false; }