Windows 8 引入全新的非同步檔案選取 API,分為三大類:
| 選擇器 | 常用屬性 | 關鍵方法 |
|---|---|---|
| FileOpenPicker | SuggestedStartLocation、CommitButtonText、FileTypeFilter、ViewMode | PickSingleFileAsync()、PickMultipleFilesAsync() |
| FileSavePicker | SuggestedStartLocation、CommitButtonText、SuggestedFileName、DefaultFileExtension、FileTypeChoices | PickSaveFileAsync() |
| FolderPicker | SuggestedStartLocation、CommitButtonText、FileTypeFilter、ViewMode | PickSingleFolderAsync() |
<Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}">
<Button Content="單檔選擇" Name="btnSingleFile" Click="btnSingleFile_Click" .../>
<Button Content="多檔選擇" Name="btnMultipleFile" Click="btnMultipleFile_Click" .../>
<Button Content="檔案儲存" Name="btnSaveFile" Click="btnSaveFile_Click" .../>
<Button Content="資料夾選擇" Name="btnSingleFolder" Click="btnSingleFolder_Click" .../>
<TextBlock Name="tbMsg" FontSize="18" .../>
</Grid>
// 單檔選取
private async void btnSingleFile_Click(object sender, RoutedEventArgs e) {
var picker = new FileOpenPicker {
SuggestedStartLocation = PickerLocationId.Desktop,
CommitButtonText = "確定選擇",
ViewMode = PickerViewMode.Thumbnail
};
picker.FileTypeFilter.Add(".txt");
picker.FileTypeFilter.Add(".jpg");
picker.FileTypeFilter.Add(".pdf");
picker.FileTypeFilter.Add(".bmp");
var file = await picker.PickSingleFileAsync();
if (file != null) tbMsg.Text = $"你選擇了 '{file.Name}' 檔案";
}
// 多檔選取
private async void btnMultipleFile_Click(object sender, RoutedEventArgs e) {
var picker = new FileOpenPicker {
SuggestedStartLocation = PickerLocationId.Desktop,
ViewMode = PickerViewMode.Thumbnail
};
picker.FileTypeFilter.Add(".txt");
picker.FileTypeFilter.Add(".jpg");
picker.FileTypeFilter.Add(".pdf");
picker.FileTypeFilter.Add(".bmp");
var files = await picker.PickMultipleFilesAsync();
if (files != null) {
var names = string.Join(",", files.Select(f => f.Name));
tbMsg.Text = $"你選擇了 '{names}' 等多個檔案";
}
}
// 檔案儲存
private async void btnSaveFile_Click(object sender, RoutedEventArgs e) {
var picker = new FileSavePicker {
SuggestedStartLocation = PickerLocationId.Desktop,
CommitButtonText = "儲存此檔案",
DefaultFileExtension = ".jpg",
SuggestedFileName = "Default File Name"
};
picker.FileTypeChoices.Add("Txt File", new List<string> { ".txt" });
picker.FileTypeChoices.Add("Photo View", new List<string> { ".jpg", ".pdf" });
var file = await picker.PickSaveFileAsync();
if (file != null) {
CachedFileManager.DeferUpdates(file);
await FileIO.WriteTextAsync(file, "這是今天學習的內容,儲存位置!");
tbMsg.Text = $"你儲存了 '{file.Name}' 檔案";
await CachedFileManager.CompleteUpdatesAsync(file);
}
}
// 資料夾選取
private async void btnSingleFolder_Click(object sender, RoutedEventArgs e) {
var picker = new FolderPicker {
SuggestedStartLocation = PickerLocationId.Desktop,
CommitButtonText = "確定資料夾"
};
picker.FileTypeFilter.Add(".txt");
picker.FileTypeFilter.Add(".jpg");
picker.FileTypeFilter.Add(".pdf");
var folder = await picker.PickSingleFolderAsync();
if (folder != null) {
StorageApplicationPermissions.FutureAccessList.AddOrReplace("Default Folder", folder);
tbMsg.Text = $"你選擇了 '{folder.Name}' 資料夾";
}
}
雙擊 Package.appxmanifest → 宣告 → 勾選 檔案選擇器 與 檔案儲存器,並在「支援任何可選類型」打勾。
完整原始碼:win8Picker.rar