65.9K
CodeProject 正在变化。 阅读更多。
Home

从嵌入式资源文件创建字符串变量

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.72/5 (18投票s)

2004年6月16日

2分钟阅读

viewsIcon

95555

downloadIcon

1434

使用嵌入式文本文件作为填充大型字符串变量的源。

引言

正如我之前在之前的文章中写过的,创建大型字符串变量可能是编码中一个乏味但必要的部分。 无论是网页的一段JavaScript或HTML,一些用于创建数据库表的SQL,还是仅仅是一长段用于工具提示的文本,都需要大型字符串。

在之前的文章中,包含的实用程序使用文本文件作为源,并编写了一个代码片段,用于创建和填充一个字符串变量,供您在自己的代码中使用。 本文采用不同的方法,将文本文件嵌入到您的程序集中,并在需要时提取它。

这种方法的主要优点是可维护性。 由于文本没有被连接或StringBuilder.Append语句分割,因此易于阅读和编辑。

使用代码

设置文本文件可以通过3个简单的步骤完成

  1. 将文本文件添加到您的解决方案。
  2. 在解决方案资源管理器中右键单击该文件,然后选择“属性”以显示该文件的属性窗口。
  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.ReflectionSystem.IOusing语句。 如果您仅更改嵌入式资源文件的文本,您将需要重新构建您的项目,因为Visual Studio不会将该更改识别为值得重新编译的代码更改。

我想再次强调最后一个关键点。 有几次我只更改了嵌入式资源文件并运行我的应用程序,却只看到返回了旧文本。 这可能非常令人沮丧,特别是如果预期的更改深埋在您的应用程序中。 如果您记住在嵌入式资源更改后需要重新构建您的应用程序,您将成为一个更快乐的程序员。

© . All rights reserved.