EditControl からタイプしたデータをファイルに書き出す

VC++ の EditControl からタイプ入力したデータを WriteFile() でファイルに書き出します。

前田稔(Maeda Minoru)の超初心者のプログラム入門

プロジェクトの設定

  1. 新規プロジェクトで[空のプロジェクト](FileOut)を作成します。
  2. [プロジェクト][リソースの追加][Dialog][新規作成]で DialogBoxを作成します。
    詳細は Dialog Box のプログラム を参照して下さい。
  3. ページ先頭の画面を参考にして Dialog Box に[EditControl]を追加して下さい。
    Dialog Box の ID は規定値のまま使っています。
    BOX キャプション ID
    DialogBox File OutPut IDD_DIALOG1
    EditControl IDC_EDIT1
    Button OK IDOK
    Button キャンセル IDCANCEL
  4. 画面左下のプロパティから以下の制御を True に設定して下さい。


  5. FileOut.cpp をフォルダーに格納してプロジェクトに追加します。
  6. ビルドに続いて実行を行います。
    EditControl に TEXT DATA をタイプ入力して OK をクリックします。
  7. カレントフォルダー(プロジェクトのフォルダー)に test.txt ファイルが作成されていることを確認して下さい。
    test.txt を Editor などで表示して、タイプした TEXT が格納されていたら完成です。

プログラムの説明

ファイルの入出力には MS-DOS の仕様も含めて様々な関数が提供されていますが、ここでは Windows の標準と思われる入出力について説明します。
  1. hFile は File Handle を格納する領域です。
    dwBytes には、実際に出力されたバイト数が格納されます。
    buf は出力する TEXT データを格納する領域で、最大 3000 バイトまで扱うことができます。
        HANDLE      hFile;
        DWORD       dwBytes;            //入力(出力)長
        char        buf[3000];          //入力(出力)領域
        
  2. OK ボタンがクリックされた時の処理です。
    GetDlgItemText() で EditControl にタイプされた TEXT を buf[3000] に取り出します。
    CreateFile() で File Handle を取得します。
    GENERIC_WRITE はファイルのアクセスタイプの指定で、ファイルにデータを書き込みます。
    CREATE_ALWAYS はファイルが既に存在するときのアクションで、存在すると上書きします。
    File Handle が INVALID_HANDLE_VALUE の時はオープンの失敗です。
    WriteFile() で buf[] のデータをファイルに書き込みます。
    dwBytes には実際に出力されたバイト数が格納されます。
    EditControl のデータをファイルに書き込んだ後でクリアしています。
        case IDOK:
            GetDlgItemText(hDlg,IDC_EDIT1,buf,3000);
            hFile= CreateFile("test.txt",GENERIC_WRITE,0,0,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);
            if (hFile==INVALID_HANDLE_VALUE)
            {   MessageBox(NULL,"test.txt Open Error","FILE OUTPUT", MB_OK);
                break;
            }
            WriteFile(hFile,buf,strlen(buf),&dwBytes,NULL);
            CloseHandle(hFile);
            SetDlgItemText(hDlg,IDC_EDIT1,"\0");
            break;
        
  3. CreateFile() で指定するアクセスタイプの説明です。
    値の説明
    0 デバイス属性の問い合わせ
    GENERIC_READ 読み取りアクセス
    GENERIC_WRITE 書き込みアクセス
  4. ファイルが既に存在するときのアクションの説明です。
    値の説明
    CREATE_NEW 新しく作成します。既にファイルが存在すると失敗
    CREATE_ALWAYS 新しく作成します。既にファイルが存在すると上書き
    OPEN_EXISTING ファイルが存在しないと失敗
    TRUNCATE_EXISTING サイズをゼロにする。ファイルが存在しないと失敗
  5. Windows 10 で Empty TextIO 空のプロジェクトからファイルを入出力します。

【課題1】

ファイルを入力して EditControl に表示する機能と、EditControl の TEXT をファイルに書き出す機能を合わせ持ったプログラムを作成して下さい。

【課題2】

Dialog Box に List Box を貼り付けて「ファイルから名簿を入力して」表示します。
ボタン操作で名簿の追加・削除を行って下さい。
プログラムの終了時に List Box の名簿を「ファイルに保存」します。
復帰改行コード(Enter キーに相当)する 0x0D0A の 2 Byte を行の最後に付加して下さい。
List Box のプログラムは List Box に名簿を表示する を参考にして下さい。

超初心者の方のために全ソースコードを掲載します。 (^_^;)
全ソースコード

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