サンプル集  >  VC  >  iniファイルの読み込み
iniファイルの読み込み
2011/01/27

VC++でiniファイルの読み込みます。

◆環境
OS Windows XP Professional Version 2002 Service Pack 3
VC Microsoft Visual C++ 2008 91179-136-7480673-60943

[ファイル(F)]-[新規作成(N)]-[プロジェクト(P)...]を開きます。 開いたら、[Visual C++]-[Win32]の[Win32 コンソール アプリケーション]を選択し以下の情報を入力し[OK]ボタンを押します。

プロジェクト名IniFileReadTest
ソリューション名IniFileReadTest

プロジェクトが生成されたら、[ビルド(B)]-[ソリューションのビルド(B)]を選択しビルドします。 ビルド後、フォルダの様子を見てみます。

IniFileReadTest
  + Debug
  | - IniFileReadTest.exe
  | - IniFileReadTest.ilk
  | - IniFileReadTest.pdb
  + IniFileReadTest
  | + Debug
  | | - BuildLog.htm
  | | - IniFileReadTest.exe.embed.manifest
  | | - IniFileReadTest.exe.embed.manifest.res
  | | - IniFileReadTest.exe.intermediate.manifest
  | | - IniFileReadTest.obj
  | | - IniFileReadTest.pch
  | | - mt.dep
  | | - stdafx.obj
  | | - vc90.idb
  | | - vc90.pdb
  | - IniFileReadTest.cpp
  | - IniFileReadTest.vcproj
  | - IniFileReadTest.vcproj.MYPC.guest.user
  | - ReadMe.txt
  | - stdafx.cpp
  | - stdafx.h
  | - targetver.h
  - IniFileReadTest.ncb
  - IniFileReadTest.cln
  - IniFileReadTest.suo

ファイルが色々生成されています。

iniファイルを読み込むプログラムを書きます。

IniFileReadTest.cpp
 1: 
 2: 
 3: 
 4: 
 5: 
 6: 
 7: 
 8: 
 9: 
10: 
11: 
12: 
13: 
14: 
15: 
16: 
17: 
18: 
19: 
20: 
21: 
22: 
23: 
24: 
25: 
26: 
27: 
28: 
29: 
30: 
31: 
32: 
33: 
34: 
35: 
36: 
37: 
38: 
39: 
40: 
41: 
42: 
43: 
44: 
45: 
46: 
47: 
48: 
49: 
// IniFileReadTest.cpp : コンソール アプリケーションのエントリ
// ポイントを定義します。
//

#include "stdafx.h"
#include <windows.h>

int _tmain( int argc, _TCHAR* argv[] )
{
    // セッション名
    LPCTSTR lpAppName = L"MAIN_INFO";

    // キー名
    LPCTSTR lpKeyName = L"PC-NUMBER";

    // 既定の文字列
    LPCTSTR lpDefault = L"nothing";

    // 情報が格納されるバッファ
    TCHAR ReturnedString[16];

    // 情報が格納されるバッファのサイズ
    DWORD nSize = sizeof( ReturnedString );

    // .iniファイルの名前
    LPCTSTR lpFileName = L"ReadTest.ini";

    // iniファイル読み込み
    DWORD ret
    = GetPrivateProfileString( lpAppName
                             , lpKeyName
                             , lpDefault
                             , ReturnedString
                             , nSize
                             , lpFileName
                             );

    // エラー情報取得
    DWORD lastErr = GetLastError();

    // 結果表示
    printf( "ref=%d LastError=%d\n", ret, lastErr );
    printf( "value=%S\n", ReturnedString );

    // 入力待ちの停止
    getchar();

    return 0;
}

今回は ReadTest.ini というファイルを読み込むよう指定しましたが、 あえてこのファイルが無い状態で実行しどんなエラーが出るか見てみます。

ref=7 LastError=0
value=nothing

GetPrivateProfileString関数の復帰値は 7 でした。 この関数は成功するとバッファに格納された文字数(終端NULLを除く)を返すようです。 ReturnedString の値は nothing という 7文字でした。

iniファイルが見つからない場合、lpDefault で指定した文字が設定され正常終了するようです。

/IniFileReadTest/Debug 配下に ReadTest.ini ファイルを作成します。

ReadTest.ini
1: 
2: 
[MAIN_INFO]
PC-NUMBER=20110224-006

実行してみましたが結果は同じでした。 exe と同じフォルダに置いてあるのに見つからないですね。 相対パス「.\\」で指定してみます。

IniFileReadTest.cpp
 1: 
 2: 
 3: 
 4: 
 5: 
 6: 
 7: 
 8: 
 9: 
10: 
11: 
12: 
13: 
14: 
15: 
16: 
17: 
18: 
19: 
20: 
21: 
22: 
23: 
24: 
25: 
26: 
27: 
28: 
29: 
30: 
31: 
32: 
33: 
34: 
35: 
36: 
37: 
38: 
39: 
40: 
41: 
42: 
43: 
44: 
45: 
46: 
47: 
48: 
49: 
50: 
51: 
52: 
53: 
54: 
55: 
56: 
57: 
58: 
59: 
60: 
61: 
62: 
63: 
// IniFileReadTest.cpp : コンソール アプリケーションのエントリ
// ポイントを定義します。
//

#include "stdafx.h"
#include <windows.h>

int _tmain( int argc, _TCHAR* argv[] )
{
    // セッション名
    LPCTSTR lpAppName = L"MAIN_INFO";

    // キー名
    LPCTSTR lpKeyName = L"PC-NUMBER";

    // 既定の文字列
    LPCTSTR lpDefault = L"nothing";

    // 情報が格納されるバッファ
    TCHAR ReturnedString[16];

    // 情報が格納されるバッファのサイズ
    DWORD nSize = sizeof( ReturnedString );

    // .iniファイルの名前
    LPCTSTR lpFileName = L"ReadTest.ini";

    // iniファイル読み込み
    DWORD ret
    = GetPrivateProfileString( lpAppName
                             , lpKeyName
                             , lpDefault
                             , ReturnedString
                             , nSize
                             , lpFileName
                             );

    // エラー情報取得
    DWORD lastErr = GetLastError();

    // 結果表示
    printf( "ref=%d LastError=%d\n", ret, lastErr );
    printf( "value=%S\n", ReturnedString );


    // iniファイル読み込み(2)
    ret
    = GetPrivateProfileString( lpAppName
                             , lpKeyName
                             , lpDefault
                             , ReturnedString
                             , nSize
                             , L".\\ReadTest.ini"
                             );
    lastErr = GetLastError();
    printf( "(2) ref=%d LastError=%d\n", ret, lastErr );
    printf( "(2) value=%S\n", ReturnedString );

    // 入力待ちの停止
    getchar();

    return 0;
}

実行してみます。

ref=7 LastError=0
value=nothing
(2) ref=12 LastError=0
(2) value=20110224-006

相対パスで読み込めました。

C:\WINDOWS に ReadTest.ini を置くとファイル名だけの指定でも取得できました。

▲ PageTop  ■ Home


Copyright (C) 2012 ymlib.com