none
テキストファイルの埋め込みと読み出し RRS feed

  • 質問

  • すみません、是非教えてください。
    Microsoft Visual C# 2010 使用。

    C#の勉強中です。

    簡単なクイズアプリケーションを作成しています。
    問題と解答をテキストデータに書き、下記のように、現在外部のテキストデータを
    読み込んで実行しています。

                string FDATA = "c:\\00.txt";
                StreamReader sr = new StreamReader(FDATA, System.Text.Encoding.Default);

    このデータを、ビルド時に埋め込んでしまいたいと思っています。
    (C:\\から読み込まない)
    リソースの登録はなんとなくできたみたいなのですが、この埋め込んだデータを
    読み込んで使用するための記述はどのようにすればよろしいでしょうか?

    よろしくお願いします。

    2011年10月30日 12:19

回答

すべての返信

    • 編集済み NF64 2011年10月30日 14:35
    • 回答としてマーク John.J.Rambo 2011年10月31日 12:00
    2011年10月30日 14:31
  • 同じ内容なので相互にリンク。
    http://bbs.wankuma.com/index.cgi?mode=al2&namber=62725
    質問スレッドで解決した場合は、解決の参考になった投稿に対して「回答としてマーク」のボタンを押すことで、同じ問題に遭遇した別のユーザが役立つ投稿を見つけやすくなります。
    2011年10月30日 15:05
    モデレータ
  • 蛇足かもしれませんが、C#を勉強中ということですので、Microsoft SQL Server Compactをひょっとしてご存じないかもしれないと思い、ご紹介しておきます。このデータベースはアプリケーションと共に配布できますので、このデータベースに問題と解答を保存するようにすれば、アプリケーションの汎用性は上がると思います。

    Microsoft SQL Server Compact 4.0
    http://www.microsoft.com/downloads/ja-jp/details.aspx?FamilyID=033CFB76-5382-44FB-BC7E-B3C8174832E2

    C#の勉強の続きとして、次のステップの目標にされると良いと思います。問題と解答を読み込むだけでしたら、簡単なSQL文のみで大丈夫です。具体的にはselect文のみで実現できるでしょう。

     


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/
    2011年10月30日 15:23
    モデレータ
  • ありがとうございます。

    早速試してみましたがうまくいきませんでした。

    この記述以外に設定しなければならないところはありますでしょうか?

    リソースのPersistenceプロパティを「実行時にリンクされました」から「.resx に埋め込まれました」に変更という内容のソースも見つけましたが、この設定が変更できません。(Persistenceの部分が半透明になっており変更できない状態)

    よろしくお願いします。

    2011年10月31日 12:08
  • 何をして、何がうまくいかなかったのかを説明して頂けない事には、アドバイスのしようがないのですが。

    テキストファイルをexeに埋め込みたいのですよね?
    それだけならPersistenceプロパティは関係ないはずです。
    参照先のURLを良くご覧になってください。

     

    #データベースを使うという方法なら、SQLiteなんかもアリかもしれません。

    2011年10月31日 13:44
  • 言葉足らずですみません。

    教えていただいた2つのURLで、現在使用しているのは最初に記載したとおり Microsoft Visual C# 2010 

    を使用していますので、2つめのURLを見て実行しました。その中に

     

    リソースのPersistenceプロパティを「実行時にリンクされました」から「.resx に埋め込まれました」に変更します。

    とありました。この変更が出来ませんでしたので返信させていただきました。

    1つめのURLの方法も試しましたが読み取れませんでした。

    2011年11月2日 12:40
  • Persistenceプロパティを弄らなくてもexeファイルにテキストファイルを埋め込む事はできます。

    このプロパティは、プロジェクト上でリソースをどのように扱うかを設定するための物で、 あなたが実現したい事とは関係がないはずです。
    また、埋め込む対象がファイルである場合にはPersistenceプロパティは変更できません。

    まずはPersistenceプロパティの事は考えずに値の取得ができるかどうか、試してみて下さい。


    • 編集済み NF64 2011年11月2日 14:10
    2011年11月2日 14:09
  • 返信ありがとうございます。

    遅くなりました。

    参考にしてソースを変更してみました。

    System.ArgumentException はハンドルされませんでした。パスに無効な文字が含まれています。 

    というエラーでうまく表示されない状態です。

    ここでいう パス は何かを今確認しています。

     

    2011年11月8日 8:11
  • その情報だけではアドバイスのしようがないので、どのようなコードを書かれたのかを記載して頂ければ
    有効な回答が得られると思います。
    2011年11月8日 11:38

  • 度々失礼しました。
    そうですね、コードを書いたほうがいいですね。

    下記のとおりに修正して実験しました。


    プロジェクト名 propro

    修正前のソース(正常動作)
                string FNAME = "c:\\koData.txt";
                StreamReader sr = new StreamReader(FNAME, System.Text.Encoding.Default);


    修正後のソース(エラー)
                System.Reflection.Assembly myAssembly =
                    System.Reflection.Assembly.GetExecutingAssembly();

                System.IO.StreamReader srr =
                    new System.IO.StreamReader(
                    myAssembly.GetManifestResourceStream("propro.koData.txt"),
                        System.Text.Encoding.GetEncoding("shift-jis"));

                string s = srr.ReadToEnd();

                StreamReader sr = new StreamReader(s, System.Text.Encoding.Default);

    よろしくお願いします。

     

    2011年11月8日 12:48
  • このコードは何がしたいのでしょうか。
    その説明もつけていただいた方がよいでしょう。

    疑問:「リソースから読み込んだ内容からもう 1 回ファイルを開こうとしてる??」
    とりあえず、s は何が入っているかデバッガで確認してください。


    質問スレッドで解決した場合は、解決の参考になった投稿に対して「回答としてマーク」のボタンを押すことで、同じ問題に遭遇した別のユーザが役立つ投稿を見つけやすくなります。
    2011年11月8日 13:02
    モデレータ
  • お世話になります。

    下記ページに記載されている方法で思い通りの動作が確認できました。

    http://homepage3.nifty.com/midori_no_bike/CS/index.html?filesys.167


    いろいろ教えていただきありがとうございました。
    また、これからもわからないことが多々出てくると思います。
    ご協力いただければ幸いです。

     

    2011年11月8日 13:35
  • もう解決されたようですが、一応書いておきます。
    単純に埋め込まれたリソースの値(ファイルの内容)を取得するだけであれば、以下の1行だけで済みます。

    Properties.Resources.[あなたが追加したリソースの識別子]
    
    

    2011年11月8日 13:39
  • ご丁寧にありがとうございます。

    後ほどこの1行でできるか、確認いたします。

     

    2011年11月8日 14:21