2

如果我向我的项目添加一个新的文本文件,regexCheck.txt它的默认构建操作是资源:

在此处输入图像描述

我知道我将能够检索该文本文件的内容,如果我将选项设置为复制到输出字典 = 总是那么我将能够找到它workingDirectory\Macros\Header\regexCheck.txt

我只是好奇我将如何能够检索该文本文件的内容而不必将其输出到工作目录。


编辑

例如,rector 能够查看我的可执行文件的所有资源: 在此处输入图像描述

我知道我可以将文件放在一个resource.resx我只是想知道如何从 exe 中提取资源

编辑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

我认为您目前无法使用将文件附加到项目的方式。

另一种方法是将“资源文件”添加到项目中。(项目 -> 添加新项目... -> 资源文件)。然后,您可以在资源文件设计器中添加文本文件(添加资源 -> 添加现有文件...)

你最终会得到一个看起来像这样的项目树:

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

然后在您的代码Resource.regexCheck中是一个包含文件内容的字符串。

于 2012-07-30T00:37:34.543 回答
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 回答