获取文本文件资源的参考

时间:2012-07-30 00:23:10

标签: c# resources

如果我将新文本文件添加到项目regexCheck.txt,则默认构建操作为资源:

enter image description here

我知道如果我将复制选项设置为输出dicectory =我将能够在workingDirectory\Macros\Header\regexCheck.txt上找到它

,我将能够检索该文本文件的内容

我很好奇我将如何能够检索该文本文件的内容而无需将其输出到工作目录。


修改

例如,relector能够查看我的可执行文件的所有资源: enter image description here

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

EDIT2

做类似的事情:

        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", "");

我设法看到了我的文本文件的内容:

enter image description here

2 个答案:

答案 0 :(得分:1)

我认为您现在不能使用附加到项目的文件的方式。

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

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

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

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

答案 1 :(得分:1)

我将构建操作从Resource更改为Embeded 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

代码字的原因是因为类和文本文件位于同一名称空间(相同的目录和名称空间)