none
データファイルのexeへの埋め込み方法 RRS feed

  • 質問

  • ●概要

     

    読み取り専用で利用するデータを別ファイルにしているのですが、これをプログラム本体のexeファイルに一体化させる良い方法はないでしょうか?

     

    ●質問の背景

     

    Windowsフォームにて以下のようなデータを一覧表示するだけの小さなアプリケーションを作成しています。

    (質問のための例で、実際には追加などが想定されないデータです。) 

     

    自治体名 自治体コード
    千代田区 131016
    中央区 131024
    港区 131032

    (…以下数百件続く)

     

    フォームにDataGridViewを配置し、データソースとしては「自治体クラス」を作成してその List(Of T) である変数(jichiListとします)を指定することで表示しています。

     

    またプログラム運用開始の前準備として、以下のようにしてファイル DATA.dat を作成しておきます。

     

    ①自治体名・自治体コード一覧のCSVファイルを読んで jichiList に格納する

    ②jichiListをシリアライズして DATA.dat というバイナリファイルを作成する

     

    プログラム実行時にはこのファイルを jichiList に読み込んで表示している、という仕組みです。

     

    一応プログラムは動いてはいるのですが、もしdatファイルをexeに埋め込むことができればexeファイル1個で動かすことができるのになぁ、等と考えています。(フリーソフトでそういう構成になっているものがあって、自分もやってみたい!という興味的な部分が大きいです…)

     

    今まではデータをプログラムから分離させるやり方しか経験したことがなく(mdb等)、初歩的な事も分かっていないかもしれません。このあたりを勉強すればいいよ、というようなアドバイスでも助かります。よろしくお願いします。

    2007年6月19日 5:56

回答

すべての返信

  • ※補足ですが、データをバイナリにしているのは簡単に中身を見られたくないからです。(ちょっと例が良くなかったです。すみません…)
    2007年6月19日 6:12
  • とりあえずこの辺りから。

     

    アプリケーションリソースへのアクセス

    http://msdn2.microsoft.com/ja-jp/library/tkkf2x4f(VS.80).aspx

    アプリケーションリソースの管理

    http://msdn2.microsoft.com/ja-jp/library/9za7fxc7(VS.80).aspx

    2007年6月19日 6:59
  • そうかリソースを使えばよいのですね!何で思いつかなかったのだろう…

    おかげさまで方針が立ちました。ありがとうございました。

    2007年6月19日 7:14
  • いままでこのような感じでデシリアライズしていました。

     

    Code Snippet

    Dim jichiList As New List(Of DictionaryEntry)

    Dim bf As New BinaryFormatter

     

    Using st As New FileStream("DATA.dat", FileMode.Open, FileAccess.Read)
      jichiList = CType(bf.Deserialize(fs), List(Of DictionaryEntry))

    End Using

      

    これを、リソースデザイナにDATA.datを追加した上で、Usingの行を以下のように変えたら希望通りにできました。

     

    Code Snippet
     Using st As New MemoryStream(My.Resources.DATA)

      

    便利すぎて、ちょっと感動しました。いろんなものが同じように扱えるのはいいですね。

    2007年6月21日 7:46