在正式版本发布后的一年内,所有符合条件的Windows7、Windows 8.1以及用户都将可以免费升级到Windows 10,Windows Phone 8.1则可以免费升级到Windows 10 Mobile版。所有升级到Windows 10的设备,微软都将提供永久生命周期的支持。
主要内容:
使用选取器打开和保存文件
关于文件、文件夹和库,如果深究其实还是有比较多的内容,我们这一次来学习一下选取器就收了。还有上篇博文中读写文本文件的三种方式可以细细体会一下。
文件选取器包含文件打开选取器(FileOpenPicker、FolderPicker)和文件保存选取器(FileSavePicker),分别用来打开文件和保存文件,这两个选取器的使用方法大致相同。
FileOpenPicker类:
注意我们设置的ViewMode和SuggestedStartLocation值在应用程序第一次运行之后,再切换其他值运行,有时候并不会起作用,应该是操作系统自己有记录,然后这个FileTypeFilter属性是必须指定的。
FileOpenPicker picker = new FileOpenPicker(); //创建文件打开选取器 picker.ViewMode = PickerViewMode.Thumbnail; //将ViewMode的值设置为Thumbnail picker.SuggestedStartLocation =PickerLocationId.PicturesLibrary; //将文件选取器打开文件的开始位置设置为图片库 picker.FileTypeFilter.Add(".jpg"); picker.FileTypeFilter.Add(".jpeg"); picker.FileTypeFilter.Add(".png");
FolderPicker类:
该类的属性和用法与FileOpenPicker类似。
FolderPicker folderPicker = new FolderPicker();
folderPicker.ViewMode = PickerViewMode.List;
folderPicker.SuggestedStartLocation = PickerLocationId.PicturesLibrary;
folderPicker.FileTypeFilter.Add("*");
FileSavePicker类:
该类我们经常使用到的3个属性是SuggestedStartLocation(同上)、FileTypeChoices、SuggestedFileName。FileTypeChoices是一个字典类型(IDictionary
FileSavePicker picker = new FileSavePicker(); picker.SuggestedStartLocation = PickerLocationId.PicturesLibrary; picker.FileTypeChoices.Add("Image", new List() { ".jpg", ".jpeg", ".png", ".bmp", ".gif" }); picker.SuggestedFileName =DateTime.Now.ToString("yyyyMMddhhmmss");
我们来进行常规演示,首先是选取单个文件,多个文件,还有文件夹。
选取并显示一张图片:
private async void btn_pickpic_Click(object sender, RoutedEventArgs e) { FileOpenPicker picker = new FileOpenPicker(); picker.ViewMode = PickerViewMode.List; picker.SuggestedStartLocation =PickerLocationId.PicturesLibrary; picker.FileTypeFilter.Add(".jpg"); picker.FileTypeFilter.Add(".jpeg"); picker.FileTypeFilter.Add(".png"); storagefile = await picker.PickSingleFileAsync(); if (storagefile != null) { this.tb_pickedpic.Text = "Picked photo: " + storagefile.Name; WriteableBitmap writeableBitmap = new WriteableBitmap(500, 500); IRandomAccessStream stream = await storagefile?.OpenAsync(FileAccessMode.Read); await writeableBitmap.SetSourceAsync(stream); image.Source = writeableBitmap; } else { this.tb_pickedpic.Text = "Operation cancelled."; image.Source = null; } }
private async void btn_pickmultipic_Click(object sender, RoutedEventArgs e) { var picker = new FileOpenPicker(); picker.ViewMode = PickerViewMode.Thumbnail; picker.SuggestedStartLocation = PickerLocationId.PicturesLibrary; picker.FileTypeFilter.Add(".jpeg"); picker.FileTypeFilter.Add(".png"); picker.FileTypeFilter.Add(".jpg"); IReadOnlyListfilelist =await picker.PickMultipleFilesAsync(); StringBuilder output = new StringBuilder("Picked files:"); if (filelist.Count>0) { foreach (var file in filelist) { output.Append(file.Name+"\n"); } } else { output.Append("none!"); } Showmsg(output.ToString()); }
Showmsg(output.ToString());是弹出对话框,显示所选择的图片。
选取文件夹:
private async void btn_pickfolder_Click(object sender, RoutedEventArgs e) { FolderPicker folderPicker = new FolderPicker(); folderPicker.ViewMode = PickerViewMode.List; folderPicker.SuggestedStartLocation = PickerLocationId.PicturesLibrary; folderPicker.FileTypeFilter.Add("*"); StorageFolder folder = await folderPicker.PickSingleFolderAsync(); if (folder != null) { StorageApplicationPermissions.FutureAccessList.AddOrReplace("PickedFolderToken", folder); Showmsg("Picked folder: " + folder.Name); } else { Showmsg("Operation cancelled."); } }
接着是保存文件,首先是保存文本文件,然后将上面选取并显示的那张图片保存到另一文件夹。
保存文本文件:
private async void button_Click(object sender, RoutedEventArgs e) { FileSavePicker savePicker = new FileSavePicker(); savePicker.SuggestedStartLocation = PickerLocationId.DocumentsLibrary; savePicker.FileTypeChoices.Add("文本文件", new List() { ".txt" }); savePicker.SuggestedFileName = "mytxt"; StorageFile file = await savePicker.PickSaveFileAsync(); if (file != null) { CachedFileManager.DeferUpdates(file); if (tbxcontent.Text.Trim().Length > 0) { await FileIO.WriteTextAsync(file,tbxcontent.Text); FileUpdateStatus status = await CachedFileManager.CompleteUpdatesAsync(file); if (status == FileUpdateStatus.Complete) { this.tbInfo.Text = "File " + file.Name + " was saved."; } else { this.tbInfo.Text = "File " + file.Name + " couldn't be saved."; } } } else { this.tbInfo.Text = "Operation cancelled."; } }
运行结果:
private async void btn_save_Click(object sender, RoutedEventArgs e) { FileSavePicker picker = new FileSavePicker(); picker.SuggestedStartLocation = PickerLocationId.PicturesLibrary; picker.FileTypeChoices.Add("Image", new List() { ".jpg", ".jpeg", ".png", ".bmp", ".gif" }); picker.SuggestedFileName =DateTime.Now.ToString("yyyyMMddhhmmss"); StorageFile file= await picker.PickSaveFileAsync(); if(file!=null&&storagefile!=null) { CachedFileManager.DeferUpdates(file); IBuffer buffer = await FileIO.ReadBufferAsync(storagefile); //storageFile是已经选中要保存的文件 await FileIO.WriteBufferAsync(file, buffer); FileUpdateStatus status = await CachedFileManager.CompleteUpdatesAsync(file); } }
运行结果:
现在微软的前景也很不错,微软官方表示,Windows 10将首次以免费升级的模式提供给符合资质的正版Windows 7和8/8.1设备的用户,并存在一定的硬软件和时限要求。此外,Windows 10还对Cortana、Microsoft Edge和Xbox等进行整合。