Browsing articles in "Uncategorized"
5月
28
2010

C#でのINIファイルの操作

C#.NETには、標準ではINIファイルを簡単に利用できるクラスが存在していない。というのも.NETでは、INIファイルの使用が推奨されていないからだ。

そんなわけで「@IT:.NET TIPS INIファイルを読み書きするには? – C#」を参考にクラスを書いてみました。

using System;
using System.IO;
using System.Text;
using System.Runtime.InteropServices;

namespace util
{
  class IniFileManager
  {
    #region Member

    private string path;

    #endregion
    #region Accessor

    public string Path
    {
      set { path = value; }
      get { return path; }
    }

    #endregion
    #region Contructor

    /// <summary>
    /// コンストラクタ
    /// </summary>
    public IniFileManager()
    {

    }

    /// <summary>
    /// コンストラクタ
    /// </summary>
    /// <param name="path">INIファイルのパス</param>
    public IniFileManager(string path)
    {
      Path = path;
    }

    #endregion
    #region Public Method

    /// <summary>
    /// プロパティを書き込む
    /// </summary>
    /// <param name="path">INIファイルのパス</param>
    public void writeProperty (string section, string key, string property)
    {
      WritePrivateProfileString(section, key, property, path);
    }

    /// <summary>
    /// セクションとキーからプロパティを取得する
    /// </summary>
    /// <param name="path">INIファイルのパス</param>
    /// <returns>指定したセクション内にあるキーのプロパティ</returns>
    public string getProperty(string section, string key) {
      StringBuilder sb = new StringBuilder(1024);
      GetPrivateProfileString(section, key, "", sb, (uint)sb.Capacity, path);
      return sb.ToString();
    }

    /// <summary>
    /// セクションとキーから整数としてプロパティを取得する
    /// </summary>
    /// <param name="path">INIファイルのパス</param>
    /// <returns>指定したセクション内にあるキーの整数プロパティ</returns>
    public int getPropertyInt(string section, string key)
    {
      return (int)GetPrivateProfileInt(section, key, 0, path);
    }

    /// <summary>
    /// セクション一覧を取得する
    /// </summary>
    /// <returns>セクション一覧</returns>
    public String[] getSections()
    {
      byte[] b = new byte[1024];

      uint resultSize = GetPrivateProfileStringByByteArray(null, null, "", b, (uint)b.Length, path);

      if (resultSize == 0)
      {
        return null;
      }

      string result = Encoding.Default.GetString(b, 0, (int)resultSize - 1);

      return result.Split('');
    }

    /// <summary>
    /// セクションからキー一覧を取得する
    /// </summary>
    /// <param name="section">セクション名</param>
    /// <returns>指定したセクション内にあるキー一覧</returns>
    public string[] getKeys(string section)
    {
      byte[] b = new byte[1024];

      uint resultSize = GetPrivateProfileStringByByteArray(
        section, null, "", b, (uint)b.Length, path);

      if (resultSize == 0)
      {
        return null;
      }

      string result = Encoding.Default.GetString(b, 0, (int)resultSize - 1);

      return result.Split('');
    }

    /// <summary>
    /// 指定したセクション内にあるキーのプロパティを削除する
    /// </summary>
    /// <param name="section">セクション名</param>
    /// <param name="key">キー</param>
    public void removeAt(string section, string key)
    {
      WritePrivateProfileString(section, key, null, path);
    }

    /// <summary>
    /// 指定したセクション内にあるキーをすべて削除する
    /// </summary>
    /// <param name="section">セクション名</param>
    public void removeAt(string section)
    {
      WritePrivateProfileString(section, null, null, path);
    }

    #endregion
    #region KERNEL32.DLL

    [DllImport("KERNEL32.DLL")]
    public static extern uint
     GetPrivateProfileString(string lpAppName,
     string lpKeyName, string lpDefault,
     StringBuilder lpReturnedString, uint nSize,
     string lpFileName);

    [DllImport("KERNEL32.DLL",
      EntryPoint = "GetPrivateProfileString")]
    public static extern uint
     GetPrivateProfileStringByByteArray(string lpAppName,
     string lpKeyName, string lpDefault,
     byte[] lpReturnedString, uint nSize,
     string lpFileName);

    [DllImport("KERNEL32.DLL")]
    public static extern uint
     GetPrivateProfileInt(string lpAppName,
     string lpKeyName, int nDefault, string lpFileName);

    [DllImport("KERNEL32.DLL")]
    public static extern uint WritePrivateProfileString(
     string lpAppName,
     string lpKeyName,
     string lpString,
     string lpFileName);

    #endregion
  }
}

注意

どのプロパティをゲットしようとしても、nullが返ってくる場合、ファイルパスが誤ってる可能性があります。
筆者の場合、それでかなり悩みました(‘A`)

参考リンク

  1. C# Programming
  2. @IT:.NET TIPS INIファイルを読み書きするには? – C#
2月
11
2010

Twitterでつぶやくアイコン

きれいなアイコン

設置の仕方

WordPress

<a href="http://twitter.com/home?status=<?php the_permalink() ?>">
  <img src="<?php bloginfo(’stylesheet_directory’); ?>/images/twitter.png" />
</a>

参考リンク

  1. TwitterのつぶやきボタンをWordPressに表示する | alifedesign
1月
12
2010

SVNのインポート時のエラー

/home/foo/
svn: Valid UTF-8 data
(hex:)
followed by invalid UTF-8 sequence
(hex: e2 52 e2 73)

こういう状況に出くわしたら、”コピー – bar.txt”とかいうファイルが、/home/foo/にいたりする。

12月
4
2009

Google日本語入力でIMEのオン・オフキーを実現する方法

それは参考リンクを見たら分かるのだが、念のため、定義ファイルを置いておく。

Google日本語入力用の定義ファイル (右クリックで名前をつけて保存)

IMEのオンは変換キー、オフは無変換キーに設定。

使用方法

  1. [プロパティ] → [一般] のキー設定で、キー設定の選択で「カスタム」を選ぶ
  2. 横の編集を押して、[インポート・エクスポート] → [インポート] を押して、上記の定義ファイルをインポートする

定義ファイルについて

ベースは、MS-IMEです。それをエクスポートしたファイルの末尾に、IMEオン・オフのための二行を追加しただけです。

その二行とは

参考リンクそのままなのですが、以下の通りです。

DirectInput    Henkan    IMEOn
Precomposition    MuHenkan    IMEOff

参考リンク

  1. IMEをオン/オフするキー – Google 日本語入力ヘルプ
11月
9
2009

使うべきでない機能

HTMLのBlink, Marquee要素

文字を点滅、流れさせたりできる要素。携帯サイトには結構なじむがPCサイトにはおおよそなじまない。まぁ、普通使わないしいらない。そして使ったらたいがい、ひどいデザインになる。

音を鳴らす

これもほとんどの場合Webになるが、いきなり音楽を鳴らしてくるサイトがある。いきなり鳴らされると驚くのでやめてほしい。

Webページでのリンク先のプレビュー

一時期、よく見かけたし、今でも著名なサイトでも見かける残念なやつ。リンクにカーソルを合わせると、ポップアップがにょきーっとでてきて、リンク先の画像のプレビューを見せ付けてくる。そんなもの誰も要求してないし、そのクソみたいなポップアップで文字読んでるのを邪魔しないでくれ。

まぁ、TPO次第だろうが、少なくともBlogとか文章ベースのサイトにはいらない。デザイン系のサイトのプレビューなどにはむしろ大歓迎だろう。

iPhoneのブラウザで傾けたら自動で回転

寝転びながらSafariを見るのを妨げるためにある機能としか思えないこの自動回転機能。Safariを横向きで見たいときなんて今まで一度たりともなかった。いや、実際、それは何度かあったが、横向きで使いたいときのためには、横に傾けるためのボタンが一つあればいいだけの話だ(これはほとんど押さないので普段押しにくい場所に)。ちなみに、カメラを傾けたら、横向きになるのはすごく便利だ。

ページ:12»

Now loading...

PR

Flickr