install folder

install folder からファイルを入力して TextBox に表示します。

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

FILEを入力

  1. install folder から "sample.dat" を入力して TextBox に表示します。
    Store App では、直接 API 呼び出しによってアプリケーションのためのアクセス可能なフォルダは限られています。
    アプリをインストールした場所(install folder)に格納されているファイルはアクセスすることが出来ます。
    (ハードディスクに格納されている一般的なファイルは、ファイルピッカーで参照します。)
  2. Windows8 のスタート画面から Visual Studio for Windows 8 を起動します。
    [FILE][New Project]から[Visual C#]で Blank App(XAML)を選び C:\TMP\ のフォルダーに InstRead のプロジェクトを作成します。
  3. MainPage.xaml をダブルクリックしてレイアウトウインドウを表示します。
    Toolbox の Common XAML Controls から [TextBox] をウインドウにドラッグします。
    Toolboxの画像
  4. MainPage.xaml の TextBox コントロールに名前("TextBox1")を付けます。
    TextBox の位置とサイズは適当に設定して下さい。
    表示するだけなので IsReadOnly をチェックします。
        <Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}">
          <TextBox x:Name="TextBox1" HorizontalAlignment="Left" Margin="507,251,0,0" TextWrapping="Wrap"
            Text="TextBox" VerticalAlignment="Top" Height="213" Width="410"
            HorizontalContentAlignment="Left" IsReadOnly="True" />
        </Grid>
        
  5. MainPage.xaml.cs を修正します。
    using Windows.Storage; を追加して下さい。
    MainPage() から TextRead() メソッドを呼び出します。
    TextRead() では install folder に格納されている "sample.dat" を入力して TextBox に表示します。
    ①InstalledLocation で StorageFolder を生成します。
    ②StorageFolder の GetFileAsync でファイル("sample.dat")を取得します。
    ③FileIO.ReadTextAsync でデータを読み込みます。
    入力したデータを TextBox で表示します。
    await は処理が終わるまで待ち合せるコードです。
    await を使うときは、メソッドに async を設定して下さい。
        using Windows.Storage;
    
            public MainPage()
            {
                this.InitializeComponent();
                TextRead();
            }
    
            private async void TextRead()
            {
                try
                {
                    StorageFolder storageFolder = Windows.ApplicationModel.Package.Current.InstalledLocation;
                    StorageFile sampleFile = await storageFolder.GetFileAsync("sample.dat");
                    if (sampleFile != null)
                    {
                        string fileContent = await FileIO.ReadTextAsync(sampleFile);
                        TextBox1.Text = fileContent;
                    }
                }
                catch (FileNotFoundException)
                {
                    TextBox1.Text = "FileNotFoundException";
                }
            }
        
  6. "sample.dat" を Editor などで作成して、プロジェクトのフォルダに格納して下さい。
    内容は問いませんが、TEXT 形式で数行のデータをタイプします。
  7. Image(画像)のときは、ソリューションエクスプローラの右クリックでプロジェクトに組み込めばOKでした。
    "sample.dat" は組み込むだけでは、リソースとして設定してくれないようです。 (^_^;)
    そこで InstRead.csproj を直接編集して "sample.dat" をプロジェクトに組み込む方法を紹介します。
    Content Include="sample.dat" の一行を追加します。
      <ItemGroup>
        <Content Include="Assets\Logo.png" />
        <Content Include="Assets\SmallLogo.png" />
        <Content Include="Assets\SplashScreen.png" />
        <Content Include="Assets\StoreLogo.png" />
        <Content Include="sample.dat" />
      </ItemGroup>
        
    ソリューションエクスプローラで確認すると sample.dat が追加されています。
  8. ソリューションエクスプローラでプロジェクトに組み込むときは、右クリックから Build Action に Content を設定して下さい。
    リソースの設定
  9. 青色の右三角をクリックして TextBox にデータが表示されることを確認して下さい。
    install folder は読み取り専用で、ファイルを作成することは出来ないようです。
  10. StorageFile を取得するコードは、次のように置き換えることが出来ます。
    修正前
        StorageFolder storageFolder = Windows.ApplicationModel.Package.Current.InstalledLocation;
        StorageFile sampleFile = await storageFolder.GetFileAsync("sample.dat");
        
    修正後
        StorageFile sampleFile = await StorageFile.GetFileFromApplicationUriAsync(new Uri("ms-appx:///sample.dat"));
        
  11. Windows8 Program(Metro Style)では、C# と C++ は同じ要領だと思っていましたが、かなり違いがあるようです。
    C++ でも同様のプログラム install Folder Read を作成しているので、併せて参照して下さい。

【NOTE】

今回作成したプロジェクトは C:\TMP\ のフォルダーに InstRead の名前で作成しています。
インストールフォルダは C:\TMP\InstRead\bin\Debug\AppX\ になっていました。
プロジェクトに組み込まれたリソースは、コンパイルするとここにコピーされるようです。
プロジェクトに組み込まなくても、ここに直接コピーして動くことを確認しました。

超初心者のプログラム入門(C# Frame Work)