INIファイルアクセスクラス
一般レベルの品質の強固なプログラムを組むためには、どうしたら良いのでしょう。いつになれば、初心者を卒業できるのでしょう。そんなことを思いながら、コードをブログに載せまくって、誰かエンジニアとしてメンターになってくれる人が、現れないかを待ち続ける日々です。
TIniFileAccess.h
/*! @file TIniFileAccess.h @brief INIファイルアクセスクラス定義 @author 涼 */ #ifndef TIniFileAccessH #define TIniFileAccessH #include <IniFiles.hpp> namespace Common { namespace FileAccess { /*! INIファイルアクセスクラス INIファイルアクセスを行うクラスのベースとしてヘルパーを担う。 コンストラクターでファイルのパスを渡して、 begin(), end()メソッドでファイルのオープン/クローズを行い、 read(), write()メソッドで、指定のセクション、キーへアクセスする。 */ class TIniFileAccess { public: /*! コンストラクター */ __fastcall TIniFileAccess(const UnicodeString &filePath); /*! 仮想デストラクター */ virtual __fastcall ~TIniFileAccess(); /** * @brief コンストラクターで渡されたファイルパスが存在すればtrueを返す。 * * @return ファイルがあればtrue。なければfalse。 */ bool __fastcall isFileExist(); /*! INIファイル操作を開始する。 @return なし。 */ void __fastcall begin(); /*! INIファイル操作を終了する。 @return なし。 */ void __fastcall end(); /*! 読み込み。 @param section :セクション @param key :キー @param readData :読み込んだデータを格納する文字列のポインタ。 読込みに失敗した場合は""を格納する。 @return なし。 */ void __fastcall read(const UnicodeString §ion, const UnicodeString &key, UnicodeString *readData); /*! 文字列書き込み。 @param section :セクション @param key :キー @param value :書込む値 @return なし。 */ void __fastcall write(const UnicodeString §ion, const UnicodeString &key, const UnicodeString &value); /*! 数値書き込み(オーバーロード)。 @param section :セクション @param key :キー @param value :書込む値 @return なし。 */ void __fastcall write(const UnicodeString §ion, const UnicodeString &key, int value); private: //! ファイル名称 const UnicodeString m_FilePath; //! INIファイルの操作用 TIniFile *m_IniFile; }; } // namespace FileAccess } // namespace Common #endif
TIniFileAccess.cpp
/*! @file TIniFileAccess.cpp @brief INIファイルアクセスクラスの実装 @author 涼 */ #include <vcl.h> #pragma hdrstop #include <IOUtils.hpp> #include "TIniFileAccess.h" #pragma package(smart_init) namespace Common { namespace FileAccess { //------------------------------------------------------------------------------ // コンストラクター //------------------------------------------------------------------------------ __fastcall TIniFileAccess::TIniFileAccess(const UnicodeString &filePath) : m_FilePath(filePath) { m_IniFile = NULL; // フォルダーを作成しておく try { ForceDirectories(TPath::GetDirectoryName(m_FilePath)); // フォルダ作成 } catch (...) { // 例外もぐもぐ。。 } } //------------------------------------------------------------------------------ // m_FilePathにファイルがあればtrueを返す //------------------------------------------------------------------------------ bool __fastcall TIniFileAccess::isFileExist() { return FileExists(m_FilePath); } //------------------------------------------------------------------------------ // TIniFileのインスタンス生成 //------------------------------------------------------------------------------ void __fastcall TIniFileAccess::begin() { m_IniFile = new TIniFile(m_FilePath); } //------------------------------------------------------------------------------ // TIniFileのインスタンス破棄 //------------------------------------------------------------------------------ void __fastcall TIniFileAccess::end() { delete m_IniFile; } //------------------------------------------------------------------------------ // 読込み //------------------------------------------------------------------------------ void __fastcall TIniFileAccess::read(const UnicodeString §ion, const UnicodeString &key, UnicodeString *readData) { if (m_IniFile == NULL) return; *readData = m_IniFile->ReadString(section, key, L""); } //------------------------------------------------------------------------------ // 文字列書込み //------------------------------------------------------------------------------ void __fastcall TIniFileAccess::write(const UnicodeString §ion, const UnicodeString &key, const UnicodeString &value) { if (m_IniFile == NULL) return; m_IniFile->WriteString(section, key, value); } //------------------------------------------------------------------------------ // 数値書込み //------------------------------------------------------------------------------ void __fastcall TIniFileAccess::write(const UnicodeString §ion, const UnicodeString &key, int value) { if (m_IniFile == NULL) return; m_IniFile->WriteInteger(section, key, value); } } // namespace FileAccess } // namespace Common