Visual Studio .NET 2003Windows 2003.NET 1.1Windows 2000Windows XPMFC中级开发Visual StudioWindowsC++.NETC#
从嵌入式资源文件创建字符串变量






4.72/5 (18投票s)
2004年6月16日
2分钟阅读

95555

1434
使用嵌入式文本文件作为填充大型字符串变量的源。
引言
正如我之前在之前的文章中写过的,创建大型字符串变量可能是编码中一个乏味但必要的部分。 无论是网页的一段JavaScript或HTML,一些用于创建数据库表的SQL,还是仅仅是一长段用于工具提示的文本,都需要大型字符串。
在之前的文章中,包含的实用程序使用文本文件作为源,并编写了一个代码片段,用于创建和填充一个字符串变量,供您在自己的代码中使用。 本文采用不同的方法,将文本文件嵌入到您的程序集中,并在需要时提取它。
这种方法的主要优点是可维护性。 由于文本没有被连接或StringBuilder.Append
语句分割,因此易于阅读和编辑。
使用代码
设置文本文件可以通过3个简单的步骤完成
- 将文本文件添加到您的解决方案。
- 在解决方案资源管理器中右键单击该文件,然后选择“属性”以显示该文件的属性窗口。
- 将“生成操作”更改为“嵌入的资源”。
完成此操作后,您的文件将在下次编译时嵌入到程序集中。 可以使用以下GetFromResources
方法将其内容读回,并用于填充要在您的应用程序中使用的字符串变量。
代码包含一个小方法,用于将资源文件提取为字符串。 使用反射,创建对当前程序集的引用。 然后,使用清单读取器方法GetManifestResourceStream
,读取文本文件并作为字符串返回。 就是这样!
internal string GetFromResources(string resourceName)
{
Assembly assem = this.GetType().Assembly;
using( Stream stream = assem.GetManifestResourceStream(resourceName) )
{
try
{
using( StreamReader reader = new StreamReader(stream) )
{
return reader.ReadToEnd();
}
}
catch(Exception e)
{
throw new Exception("Error retrieving from Resources. Tried '"
+ resourceName+"'\r\n"+e.ToString());
}
}
}
使用该方法填充字符串变量只需一行代码即可完成
string quote =
new EmbeddedResourceTextReader().GetFromResources
("McKechney.EmbeddedResouceTextExample.Folder.Shakespeare.txt");
需要记住的关键点
resourceName
区分大小写。resourceName
必须是文件的完全限定名称:默认命名空间 + 文件夹名称(如果适用)+ 文件名(带有扩展名)。- 您的代码文件将需要具有
System.Reflection
和System.IO
的using
语句。 如果您仅更改嵌入式资源文件的文本,您将需要重新构建您的项目,因为Visual Studio不会将该更改识别为值得重新编译的代码更改。
我想再次强调最后一个关键点。 有几次我只更改了嵌入式资源文件并运行我的应用程序,却只看到返回了旧文本。 这可能非常令人沮丧,特别是如果预期的更改深埋在您的应用程序中。 如果您记住在嵌入式资源更改后需要重新构建您的应用程序,您将成为一个更快乐的程序员。