首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> C# >> 關於C#

Windows 8 開發入門(十七):檔案選擇器、儲存器與資料夾選擇器全解析

     編輯:關於C#

Windows 8 引入全新的非同步檔案選取 API,分為三大類:

  • FileOpenPicker:單選/多選檔案
  • FileSavePicker:儲存檔案
  • FolderPicker:選取資料夾

核心屬性與方法對照表

選擇器常用屬性關鍵方法
FileOpenPicker SuggestedStartLocation、CommitButtonText、FileTypeFilter、ViewMode PickSingleFileAsync()、PickMultipleFilesAsync()
FileSavePicker SuggestedStartLocation、CommitButtonText、SuggestedFileName、DefaultFileExtension、FileTypeChoices PickSaveFileAsync()
FolderPicker SuggestedStartLocation、CommitButtonText、FileTypeFilter、ViewMode PickSingleFolderAsync()

完整 XAML 介面

<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>

後端 C# 實作(非同步/await 模式)

// 單檔選取
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}' 資料夾";
    }
}

重要:Manifest 勾選權限

雙擊 Package.appxmanifest → 宣告 → 勾選 檔案選擇器 與 檔案儲存器,並在「支援任何可選類型」打勾。

Manifest 檔案選擇器宣告
圖 1:Package.appxmanifest 宣告設定
單檔選擇執行畫面
圖 2:單檔選擇器運行效果
多檔選擇執行畫面
圖 3:多檔選擇器運行效果
檔案儲存執行畫面
圖 4:檔案儲存器運行效果
資料夾選擇執行畫面
圖 5:資料夾選擇器運行效果
資料夾選擇結果
圖 6:選取資料夾後提示

完整原始碼:win8Picker.rar

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved