7

テキストファイルから読み取り、データを読み込んで保存するためにそれらを作成できるプログラムを作成しました。プログラムが起動するとすぐにロードされる「デフォルト」データであるファイルがいくつかあります。ファイルは静的参照によってロードされます。コードを公開する前は正常に動作しますが、明らかに公開すると、静的参照が機能しなくなります。ビルド後も参照できるように、既定のデータを個別のテキスト ファイルとしてビルドに追加する方法がわかりません。

プログラムをビルドし、簡単に参照できるデフォルトのデータファイルを含む実行可能ファイルに付随する何らかのフォルダーを作成できると想像していますが、その方法がわかりません(または、より良い方法があるかどうか)。 .

以下は、ファイルから読み取るために使用するコードの始まりです。現在、デフォルトのデータのファイル名は静的にサブルーチンに渡され、読み取るファイルを識別するために使用されるため、同じことを実行できる公開ファイルが必要です。

Try
    Dim sr As New IO.StreamReader(FileName)
    Dim strLine As String = ""

    Do Until sr.EndOfStream
        strLine = sr.ReadLine
        'Code that interprets the data in the file

注: ファイルを「リソース」として追加しようとしましたが、ファイルをテキスト ファイルとして参照できないようです。上記のコードでは機能しないドキュメント内に含まれる大量のテキストの壁しか取得できません (もちろん、何かが欠けている場合を除きます)。

明確にすることができれば:

  1. ファイル名でまとめてアクセスできるように、ファイルをビルドに追加するにはどうすればよいですか?
  2. 私のコードは、最終ビルドでどのようにファイルを参照しますか (たとえば、"My.Resources.filename" によって)?
4

1 に答える 1

10

ファイルは、コンテンツ ファイルまたは埋め込みリソースとしてビルドに追加できます。

コンテンツ ファイルの場合、ファイルの [ビルド アクション] を [コンテンツ] に設定し、[出力ディレクトリにコピー] をファイル プロパティで [常にコピー] に設定します。その後、次のようにファイルにアクセスできます。

FileName = Application.StartupPath() = + FileName
Dim sr As New IO.StreamReader(FileName)
...

ファイルをリソースとして埋め込むには、ファイルの Build Action を「Embedded Resource」に設定し、Copy to Output Directory を false に設定する必要があります。このMicrosoft サポート ページには、埋め込みリソースへのアクセスに関するウォークスルーがあります。コードは次のようになります。

Dim sr As StreamReader
Dim thisAssembly As Assembly
thisAssembly = Assembly.GetExecutingAssembly()
sr = New StreamReader(thisAssembly.GetManifestResourceStream("NameSpace." + FileName))

Dim strLine As String = ""
Do Until sr.EndOfStream
    strLine = sr.ReadLine
    'Code that interprets the data in the file
    ...

アプリケーションの名前空間に置き換えNameSpaceます (プロジェクト プロパティ -> アプリケーション -> ルート名前空間)。

Imports System.Reflectionまた、コード ファイルの先頭に追加する必要があります。

埋め込みリソースを使用すると、管理するファイルが減り、パスを追跡する必要がないという利点があります。

于 2013-05-23T01:33:25.273 に答える