如何使用 StreamReader
读取嵌入式资源(文本文件)并将其作为字符串返回?我当前的脚本使用Windows窗体和文本框,允许用户查找和替换未嵌入的文本文件中的文本 .
private void button1_Click(object sender, EventArgs e)
{
StringCollection strValuesToSearch = new StringCollection();
strValuesToSearch.Add("Apple");
string stringToReplace;
stringToReplace = textBox1.Text;
StreamReader FileReader = new StreamReader(@"C:\MyFile.txt");
string FileContents;
FileContents = FileReader.ReadToEnd();
FileReader.Close();
foreach (string s in strValuesToSearch)
{
if (FileContents.Contains(s))
FileContents = FileContents.Replace(s, stringToReplace);
}
StreamWriter FileWriter = new StreamWriter(@"MyFile.txt");
FileWriter.Write(FileContents);
FileWriter.Close();
}
16 回答
我知道这是旧的,但我只想指出 NETMF ( . Net MicroFramework),你可以轻松地做到这一点:
由于 NETMF 没有
GetManifestResourceStream
你也可以使用这个简化版的@ dtb的答案:
在Visual Studio中,您可以通过Project属性的Resources选项卡直接嵌入对文件资源的访问(在此示例中为"Analytics") .
然后可以将生成的文件作为字节数组进行访问
如果您需要它作为流,那么(来自https://stackoverflow.com/a/4736185/432976)
通过所有的功能组合,我使用这个帮助器类以通用方式从任何程序集和任何命名空间中读取资源 .
阅读完这里发布的所有解决方案后 . 这就是我解决它的方式:
我读了一个嵌入式资源文本文件使用:
样品:
我很生气,你必须始终在字符串中包含命名空间和文件夹 . 我想简化对嵌入式资源的访问 . 这就是我写这个小班的原因 . 随意使用和改进!
用法:
类:
添加例如Testfile.sql项目菜单 - >属性 - >资源 - >添加现有文件
在表格加载事件上读取嵌入的TXT文件 .
动态设置变量 .
调用Try Catch .
为IncludeText()创建Void,Visual Studio为您做到这一点 . 单击灯泡以自动生成CodeBlock .
将以下内容放入生成的代码块中
资源1
资源2
资源3
如果您希望将返回的变量发送到其他地方,只需调用另一个函数并...
这实现了这一点,一种在单个富文本框内组合多个txt文件并读取其嵌入数据的方法 . 这个代码示例是我期望的效果 .
我刚刚学到的一点是你的文件不允许有“ . ”文件名中的(点) .
Templates.plainEmailBodyTemplate-en.txt - > Works !!!
Templates.plainEmailBodyTemplate.en.txt - >无法通过GetManifestResourceStream()工作
可能是因为框架混淆了名称空间与文件名...
您可以使用两种不同的方法将文件添加为资源 .
访问文件所需的C#代码是不同的,具体取决于首先添加文件的方法 .
方法1:添加现有文件,将属性设置为嵌入式资源
将文件添加到项目中,然后将类型设置为
Embedded Resource
.注意:如果使用此方法添加文件,则可以使用
GetManifestResourceStream
来访问它(请参阅@dtb的答案) .方法2:将文件添加到Resources.resx
打开
Resources.resx
文件,使用下拉框添加文件,将Access Modifier
设置为public
.注意:如果使用此方法添加文件,则可以使用
Properties.Resources
访问它(请参阅@Night Walker的答案) .你可以使用Assembly.GetManifestResourceStream Method:
设置相关文件的属性:
参数
Build Action
,其值为Embedded Resource
使用以下代码
resourceName
是assembly
中嵌入的资源之一的名称 . 例如,如果嵌入名为"MyFile.txt"
的文本文件,该文件位于具有默认命名空间"MyCompany.MyProduct"
的项目的根目录中,则resourceName
为"MyCompany.MyProduct.MyFile.txt"
. 您可以使用Assembly.GetManifestResourceNames Method获取程序集中所有资源的列表 .从文件名中获取
resourceName
(通过传递命名空间的东西)是一个明智的选择:看看这个页面:http://support.microsoft.com/kb/319292
基本上,您使用
System.Reflection
来获取对当前程序集的引用 . 然后,您使用GetManifestResourceStream()
.例如,从我发布的页面:
Note :需要添加
using System.Reflection;
才能正常工作将文件添加到资源时,应将其“访问修饰符”选为“公共”,而不是像下面这样进行操作 .
CLIST01是嵌入文件的名称 .
实际上你可以去resources.Designer.cs看看getter的名字是什么 .
我知道这是一个旧线程,但这对我有用:
将文本文件添加到项目资源中
将访问修饰符设置为public,如Andrew Hill所示
读取这样的文字:
我添加到资源的文本:'SomeText.txt'