2

プロジェクトに新しいテキスト ファイルを追加すると、regexCheck.txtデフォルトのビルド アクションはリソースとして次のようになります。

ここに画像の説明を入力

出力 dicectory = always にコピーするオプションを設定すると、そのテキスト ファイルの内容を取得できることがわかっています。workingDirectory\Macros\Header\regexCheck.txt

作業ディレクトリに出力せずに、そのテキスト ファイルの内容を取得する方法に興味があります。


編集

たとえば、relector は実行可能ファイルのすべてのリソースを確認できます。 ここに画像の説明を入力

resource.resxexe からリソースを抽出する方法を知りたいだけです。

編集2

次のようなことをします:

        var _assembly = Assembly.GetExecutingAssembly();
        var resourceName = _assembly.GetManifestResourceNames()[0];
        var steam = _assembly.GetManifestResourceStream(resourceName);
        var buffer = new byte[2048];
        steam.Read(buffer, 0, buffer.Length);
        var text = System.Text.ASCIIEncoding.ASCII.GetString(buffer).Replace("\0", "");

テキストファイルの内容を見ることができました:

ここに画像の説明を入力

4

2 に答える 2

1

ビルド アクションを から に変更しましResourceEmbeded Resource

次のようにしてコンテンツを取得できました。

        var fileName = "regexCheck.txt";

        var currentNamespace = typeof(this).Namespace;  // if static class use name of class      
        var fullName = currentNamespace + "." + fileName;

        Func<string,Stream> getResStream =
            x => Assembly.GetExecutingAssembly().GetManifestResourceStream(x);

        using (Stream stream = getResStream(fullName))            
            using (StreamReader reader = new StreamReader(stream))                
                string result = reader.ReadToEnd();  // <------   Result should be the content of text file

そのコード ワードがクラスとテキスト ファイルが同じ名前空間 (同じディレクトリと名前空間) にあるためである理由

于 2012-07-30T02:21:46.933 に答える
1

現時点では、ファイルをプロジェクトに添付した方法を使用できるとは思いません。

もう 1 つの方法は、「リソース ファイル」をプロジェクトに追加することです。(プロジェクト -> 新しいアイテムの追加... -> リソース ファイル)。その後、リソース ファイル デザイナーでテキスト ファイルを追加できます (リソースの追加 -> 既存のファイルの追加...)。

プロジェクト ツリーは次のようになります。

Project
   |
   +-- Resources
   |      |
   |      +--  regexCheck.txt
   |
   +-- Resource.resx
   |      |
   |      +--  Resource.Designer.cs

コードResource.regexCheckには、ファイルの内容を含む文字列があります。

于 2012-07-30T00:37:34.543 に答える