Empty TextIO

[C++ 空のプロジェクト]で Text File の入出力を行います。

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

プログラムの説明

  1. [C++ 空のプロジェクト]から作成すると、余計なファイルが作成されず「すっきりしたプロジェクト」を構築することが出来ます。
    2019/09 Windows10 & Visual Studio Professional 2019 16.2.3 の環境でメニューを設定します。
    [新しいプロジェクトの作成]から[C++ 空のプロジェクト]を作成して下さい。
    プロジェクトのフォルダーに Main.cpp を格納して[既存の項目の追加]からプロジェクトに組み込みます。
    詳細は Empty Hello を参照して下さい。
  2. [リソースファイル]をクリックしてメニューから [プロジェクト][リソースの追加][Menu][新規作成] でメニューを追加します。
    親メニュー 子メニュー ID 説明
    ファイル(&F)
    Text 入力(&R) IDM_GET Text File から入力して確認
    Text 出力(&W) IDM_PUT 現在時刻を Text File に書き出す
    アプリケーションの終了(&X) IDCANCEL プログラムの終了

  3. リソースを登録すると resource.h が作成されるので #include して下さい。
    この中にIDが定義されています。
    #include    "resource.h"
    
  4. IDM_GET メニューを実装します。
    修正直後はエラー(赤の下線)が表示されます。
    "c:\tmp\test.txt" から入力して MessageBox() で表示します。
        HANDLE      hFile;
        DWORD       len;            //入力(出力)長
        WCHAR       buf[1000];
        SYSTEMTIME  STime;
    
        case WM_COMMAND:
        {
            // 選択されたメニューの解析 :
            switch(LOWORD(wParam))
            case IDM_GET:
                hFile = CreateFile(L"c:\\tmp\\test.txt", GENERIC_READ, 0, 0,
                    OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
                if (hFile == INVALID_HANDLE_VALUE)
                {
                    MessageBox(NULL, L"Read Error  test.txt", L"Error", MB_OK);
                    break;
                }
                ReadFile(hFile, buf, 1000, &len, NULL);
                CloseHandle(hFile);
                buf[len/2] = '\0';
                MessageBox(NULL, buf, L"Text Data", MB_OK);
                break;
    
  5. IDM_PUT メニューを実装します。
    現在時刻を取得して "c:\tmp\test.txt" に書き出します。
            case IDM_PUT:
                hFile = CreateFile(L"c:\\tmp\\test.txt", GENERIC_WRITE, 0, 0,
                    CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
                if (hFile == INVALID_HANDLE_VALUE)
                {
                    MessageBox(NULL, L"Write Error  test.txt", L"Error", MB_OK);
                    break;
                }
                GetLocalTime(&STime);
                wsprintf(buf,L"%2d:%2d:%2d",STime.wHour,STime.wMinute,STime.wSecond);
                WriteFile(hFile, buf, 16, &len, NULL);
                CloseHandle(hFile);
                break;
    
  6. IDM_EXIT メニューを実装します。
            case IDM_EXIT:
                DestroyWindow(hWnd);
                break;
            default:
                return DefWindowProc(hWnd, msg, wParam, lParam);
        }
        break;
    }
    
  7. コンパイル(リビルド)するとエラーが無くなります。
    「Text 出力(&W)」で現在時刻を書き出して「Text 入力(&R)」で確認して下さい。
    "c:\tmp\test.txt" には utf-16 で書き出されます。
    入力/出力の長さはバイト長なので、1/2(2倍)に調整しています。

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

超初心者のプログラム入門(C言語 Windows)