HANDLE を使った string 入出力

Windows 標準のファイルHANDLEを使った string データの入出力です。

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

string のデータを書き出す

  1. STL の string に格納されているデータをファイルに書き出してみましょう。
    string str; にファイルに書き出す TEXT DATA を格納します。
    別に何でも良いのですが、1~10の値を編集して格納しました。
        string  str;
    
        for(i=1; i<11; i++)
        {    sprintf(buf,"%5d\n",i);
             str+= buf;
        }
        
  2. "test.txt" ファイルを出力モードでオープンします。
        hFile= CreateFile("test.txt",GENERIC_WRITE,0,0,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL, NULL);
        if (hFile==INVALID_HANDLE_VALUE)
        {   printf("test.txt CreateFile Error");
            return 0;
        }
        
  3. str のデータをファイルに書き出します。
        WriteFile(hFile,str.c_str(),str.size(),&dwBytes,NULL);
        
  4. ソースプログラムです。
    /*★ String をファイルに出力する   前田 稔 ★*/
    #include    <windows.h>
    #include    <string>
    using       namespace std;
    
    HANDLE      hFile;
    DWORD       dwBytes;
    
    int main()
    {   string  str;
        char    buf[12];
        int     i;
    
        for(i=1; i<11; i++)
        {    sprintf(buf,"%5d\n",i);
             str+= buf;
        }
        printf("%s\n", str.data());
    
        hFile= CreateFile("test.txt",GENERIC_WRITE,0,0,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL, NULL);
        if (hFile==INVALID_HANDLE_VALUE)
        {   printf("test.txt CreateFile Error");
            return 0;
        }
        WriteFile(hFile,str.c_str(),str.size(),&dwBytes,NULL);
        CloseHandle(hFile);
        return 0;
    }
    

string にデータを読み込む

  1. "test.txt" に書き出されたデータを STL の string に読み込みます。
    str のサイズを仮に 1000 文字に設定します。
    下記のように書くと、領域は '.' で埋められます。
        string  str;
    
        str.resize(1000,'.');
        
  2. "test.txt" ファイルを入力モードでオープンします。
        hFile = CreateFile("test.txt",GENERIC_READ,0,0,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
        if (hFile==INVALID_HANDLE_VALUE)
        {   printf("test.txt CreateFile Error");
            return 0;
        }
        
  3. データを str に読み込みます。
        ReadFile(hFile,(LPVOID)str.data(),1000,&dwBytes,NULL);
        
  4. 実際の入力長に合わせて str のサイズを設定します。
        str.resize(dwBytes);
        
  5. ファイルからデータを読み込むソースコードです。
    /*★ ファイルから String に入力する   前田 稔 ★*/
    #include    <windows.h>
    #include    <string>
    using       namespace std;
    
    HANDLE      hFile;
    DWORD       dwBytes;
    
    int main()
    {   string  str;
    
        str.resize(1000,'.');
    
        hFile = CreateFile("test.txt",GENERIC_READ,0,0,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
        if (hFile==INVALID_HANDLE_VALUE)
        {   printf("test.txt CreateFile Error");
            return 0;
        }
        ReadFile(hFile,(LPVOID)str.data(),1000,&dwBytes,NULL);
        CloseHandle(hFile);
        str.resize(dwBytes);
    
        printf("LEN=%d\n%s\n",dwBytes, str.data());
        return 0;
    }
    
  6. FILE ポインタを使った通常のバイナリ入出力は レコードの入出力 を参照して下さい。
    Windows Program のファイル入力は ファイルを入力する Object Class を作成する を参照して下さい。
    C# の Binary データの出力は binary DATA の出力 を、 入力は binary DATA の入力 を参照して下さい。
    リンクがエラーになるときは「前田稔の超初心者のプログラム入門」から辿って下さい。

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