Picker Folder

Picker を使って Folder を選択します。
フォルダに格納されている "test.txt" からデータを入力して印字します。

前田稔の超初心者のプログラム入門

プログラムの説明

  1. Picker を使うと、全てのフォルダにアクセス出来るようです。
    今回は Picker を使って取得したフォルダに格納されている "test.txt" からデータを入力して OutputDebugString() で印字します。
    従って、Picker で選択するフォルダには、事前に TEXT データをタイプした "test.txt" を格納しておいて下さい。
  2. Visual Studio for Windows 8 を起動して、Blank App(XAML)を作成して下さい。
    MainPage.xaml をダブルクリックしてレイアウトウインドウを表示します。
    ツールボックスからウインドウに Button を貼り付けます。
    ボタンクリックの Event Handler("Button_Click") を設定して下さい。
    OutputDebugString() で印字するので、ウインドウに貼り付けるのは Button だけです。
  3. MainPage.xaml.cpp の #include と using の設定です。
    #include "pch.h"
    #include "MainPage.xaml.h"
    #include <ppltasks.h>
    
    using namespace App1;
    
    using namespace Platform;
    using namespace Windows::Foundation;
    using namespace Windows::Foundation::Collections;
    using namespace Windows::UI::Xaml;
    using namespace Windows::UI::Xaml::Controls;
    using namespace Windows::UI::Xaml::Controls::Primitives;
    using namespace Windows::UI::Xaml::Data;
    using namespace Windows::UI::Xaml::Input;
    using namespace Windows::UI::Xaml::Media;
    using namespace Windows::UI::Xaml::Navigation;
    
    using namespace Windows::Storage::Pickers;
    using namespace Windows::Storage;
    using namespace Windows::Storage::Streams;
    using namespace concurrency;
    
  4. MainPage.xaml.cpp の ButtonClick に Picker を使ってフォルダを選択するコードを書きます。
    フォルダから "test.txt" を入力して OutputDebugString() で印字します。
    void App1::MainPage::Button_Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
    {
        FolderPicker^ folderPicker = ref new FolderPicker();
        folderPicker->SuggestedStartLocation = PickerLocationId::Desktop;
    
        // For example, when choosing a documents folder, restrict the filetypes to documents for your application.
        folderPicker->FileTypeFilter->Append(".docx");
        folderPicker->FileTypeFilter->Append(".xlsx");
        folderPicker->FileTypeFilter->Append(".pptx");
    
        create_task(folderPicker->PickSingleFolderAsync()).then([this](StorageFolder^ folder)
        {   if (folder)
            {
    String^ msg = "**Picked Folder: ";
    msg += folder->Name + "\n";
    OutputDebugString(msg->Data());
    
                create_task(folder->GetFileAsync(L"test.txt")).then([this](StorageFile^ file) 
                {
                    return FileIO::ReadTextAsync(file);
                }).then([this](task<String^> previousTask) 
                {
                    try
                    {
                        String^ text = previousTask.get();
                        OutputDebugString(text->Data());
                    }
                    catch (...)
                    {   }
                });
            }
            else
            {   }
        });
    }
    
  5. プログラムをコンパイル&実行して下さい。
    ボタンをクリックするとウインドウエクスプローラと同様にフォルダを選択することが出来ます。
    [このフォルダを選択]をクリックして、フォルダが表示されるのを確認します。
    [OKボタン]をクリックすると、コンソール画面に "test.txt" から入力したデータが印字されます。
    選択されるフォルダには、事前に "test.txt" を格納しておいて下さい。
    もう一度ボタンをクリックすると、再びフォルダの選択画面が表示されます。
  6. Documents と C:\TMP\ に test.txt を格納して、データの入力を確認しました。
    Documents のフォルダから入力するときも、マニフェストの設定は必要ないようです。
    **Picked Folder: Documents
    Document File  test.txt
    **Picked Folder: TMP
    C:\TMP\test.txt file
    

超初心者のプログラム入門(C/C++)