BasicReaderWriter Class

BasicReaderWriter Class で TEXT FILE を入力します。

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

TEXT FILE 入力

  1. Windows10 で TEXT FILE から文字列を入力して String に格納します。
    このプログラムは DirectX の Loader を作成するための下調べが目的です。
    従って、入力するモデルファイルは Shift-JIS でタイプされています。
    Store App の String は Unicode なので、MultiByte(Shift-JIS) から Unicode に変換しなければなりません。
    詳細は Program Guid を参照して下さい。
  2. Win10 で従来のファイル入出力が使えたら良いのですが using の System 自体がエラーになります。
    using namespace System;
    using namespace System::IO;
    using namespace System::Text;
    
    仕方が無いので、BasicReaderWriter を試します。
    BasicReaderWriter は Windows Store DirectX の基本入出力です。
  3. ベースとなるプロジェクト Blank App(XAML) を構築して下さい。
    手順は Windows8 Blank App を参照して下さい。
    MainPage.xaml に Button を貼り付けて Event Handler を設定して下さい。
  4. 実行結果を確認する Debug(String^ msg) 関数を using の直後にでも置いて下さい。
    String は名前空間 Platform で定義されています。
    using namespace Platform; を定義して下さい。
    void Debug(String^ msg)
    {
        String^ message= ref new String(msg->Data());
        message+="\r\n";
        OutputDebugString(message->Data());
    }
    
  5. BasicReaderWriter.cpp と BasicReaderWriter.h をプロジェクトのフォルダに格納して加えて下さい。
    BasicReaderWriter Class のソースコードを Windows10 DirectX Library に掲載しています。
  6. テストで使用する test.txt ファイルをプロジェクトに加えます。
    コードは当然ながら Shift-JIS を使って下さい。
    test text message
  7. pch.h に次の行を追加します。
    #include <wrl.h>
  8. Button Click に test.txt ファイルを入力するコードを書きます。
    reader->ReadData() がファイルを入力するコードですが、配列に対して読み込まれるようです。
    Array の書き方も、従来の C++ とは微妙に違います。 (^_^;)
    byte は8ビットの符号(サイン)なしの形式です。
    char では符号(サイン)付きになるので、byte の方が適しています。
    入力した Shift-JIS を MultiByteToWideChar() で Unicode に変換します。
    ref new String(wk); で String を生成して Debug(wstr); で確認します。
    void App1::MainPage::Button_Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
    {
        BasicReaderWriter^ reader = ref new BasicReaderWriter();
        Platform::Array<byte>^ data = reader->ReadData("test.txt");
    
        WCHAR   wk[MAX_PATH];
        MultiByteToWideChar(CP_ACP,MB_PRECOMPOSED,(char*)data->Data,-1,wk,MAX_PATH);
        String^ wstr = ref new String(wk);
    
        Debug(wstr);
    }
    

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