2017-08

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

INIファイル管理クラス

C++で適当に作ったWinodws用のINIファイル管理クラス


#pragma once

#include
#include
#include

namespace myutil
{
///
/// iniファイルを扱うクラス
///

class IniFile
{
// コンストラクタ、デストラクタ-----------------------
public:
///
/// コンストラクタ
///

/// INIファイル名(ファイル名のみ)
IniFile( const std::string& file )
{
char curDir[MAX_PATH+1];
::GetCurrentDirectoryA( MAX_PATH+1, curDir );
fileName = std::string(curDir) + std::string("\\") + file;
}

///
/// デストラクタ
///

virtual ~IniFile()
{}


// 属性-----------------------------------------------
private:
// INIファイル名
std::string fileName;


// 操作-----------------------------------------------
public:
///
/// INIファイルにデータを書き出す( operator << を定義してるものは使える )
///

/// 指定したセクション
/// 指定したキー
/// 保存するデータ
template
void write( const std::string& sec, const std::string& key, const T& val )
{
std::stringstream ss;
ss << val;
::WritePrivateProfileStringA( sec.c_str(), key.c_str(), ss.str().c_str(), fileName.c_str() );
}

///
/// INIファイルからデータを読み出す( operator >> を定義してるものは使える )
///

/// 指定したセクション
/// 指定したキー
/// 取得するデータへのポインタ
/// 成功 / 失敗
template
bool read( const std::string& sec, const std::string& key, T* val )
{
// 取得結果を保存するバッファ
char buf[256];
::GetPrivateProfileStringA( sec.c_str(), key.c_str(), "error", buf, sizeof(buf), fileName.c_str() );

// エラーかどうか確認
if( std::string( "error" ) == std::string(buf) ) return false;

// データを保存
std::stringstream ss( buf );
ss >> *val;
return true;
}

};
};


プログラム例。


#define _USE_MATH_DEFINES
#include
#include
#include
#include "IniFile.h"

int main()
{
myutil::IniFile ini("test.ini");
int hoge_write = 100;
double pi_write = M_PI;

// 書き込み
ini.write( "test1", "A", "aaaaa" );
ini.write( "test2", "hoge", hoge_write );
ini.write( "test3", "pi", pi_write );

std::string str;
double pi_read;
int hoge_read;

// 読み込み
ini.read("test1", "A", &str );
ini.read("test2", "hoge", &hoge_read);
ini.read("test3", "pi", &pi_read );

std::cerr << "A : " << str << std::endl;
std::cerr << "hoge : " << hoge_read << std::endl;
std::cerr << "pi : " << pi_read << std::endl;

getchar();

return 0;
}



出力結果
   
A : aaaaa
hoge : 100
pi : 3.141592



出力したINIファイルの中身

[test1]
A=aaaaa
[test2]
hoge=100
[test3]
pi=3.14159


結構管理が簡単になるかと。
boostつかってXML出力したほうが楽かもね。

● COMMENT FORM ●


管理者にだけ表示を許可する

トラックバック

http://chicklab.blog84.fc2.com/tb.php/20-85da2e56
この記事にトラックバックする(FC2ブログユーザー)

NEW ENTRY «  | BLOG TOP |  » OLD ENTRY

カレンダー

07 | 2017/08 | 09
- - 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 - -

FC2カウンター

最新記事

最新コメント

最新トラックバック

月別アーカイブ

カテゴリ

未分類 (7)
日記 (7)
wiiremote (1)
google (1)
回路 (3)
psp (1)
programing (15)
linux (0)
OpenWRT (3)
kinect (1)
Raspberry Pi (8)

検索フォーム

RSSリンクの表示

リンク

このブログをリンクに追加する

google adsense

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。