C#资源管理

                         C#资源管理(2004.10) 


    资源是在逻辑上由应用程序部署的任何非可执行数据。资源可以在应用程序中作为错误信息显示,或者作为用户界面的一部分显示。资源可以包含多种形式的数据,包括字符串、图像和持久的对象。通过在资源文件中存储您的数据,您无需重新编译整个应用程序即可更改数据。请注意,为了将持久对象写入资源文件,这些对象必须是可序列化的。
   资源的最主要用途:对区域性和多语言的支持。
   使用程序集链接器 (Al.exe) 可以将 .resources 文件编译成附属程序集。附属程序集只能包含资源,不包含任何可执行代码。

    在.Net中使用资源常见的有以下两种方式:将资源文件作为单独的文件链接到程序集中,和将资源嵌入PE文件中。

1.将资源文件作为单独的文件链接到程序集中:
 (1)首先在解决方案资源管理器中添加所要嵌入的Rude资源(如某个位图等)。
 (2)修改目标资源的"生成操作"属性为"嵌入的资源"。
 (3)在程序中如下使用资源:
    如有4个BMP图片资源,则以如下方式将其放入一个imagelist中
    System.Reflection.Assembly thisExe;
    this.thisExe = System.Reflection.Assembly.GetExecutingAssembly();
   
    System.IO.Stream file1 = thisExe.GetManifestResourceStream("DBCodeFactory.Recourse.OPEN.BMP");
   System.IO.Stream file2 = thisExe.GetManifestResourceStream("DBCodeFactory.Recourse.NEW.BMP");
   System.IO.Stream file3 = thisExe.GetManifestResourceStream("DBCodeFactory.Recourse.SAVE.BMP");
   System.IO.Stream file4 = thisExe.GetManifestResourceStream("DBCodeFactory.Recourse.DB.BMP");
   this.imageList1.Images.Add(Image.FromStream(file1));
   this.imageList1.Images.Add(Image.FromStream(file2));
   this.imageList1.Images.Add(Image.FromStream(file3));
   this.imageList1.Images.Add(Image.FromStream(file4));
  

注意路径:"DBCodeFactory.Recourse.OPEN.BMP" , DBCodeFactory为当前项目输出的命名空间,Recourse为解决方案资源管理器中的文件夹,4个位图都在该目录下, OPEN.BMP为目标资源名称。

2.将资源嵌入PE文件中--使用System.Resources命名空间创建和使用资源文件
 一个资源文件可以包含众多的资源,这些资源可分为三种类型:字符串,字节数组,任意对象。
      //创建资源
      ResourceWriter rw = new ResourceWriter ( "My.resources" ) ;
      Image image1 = Image.FromFile ("abc1.jpg") ;      
      rw.AddResource ( "abc1" , image1 ) ;            //object , "abc1"是唯一标志符
      rw.AddResource( "abc4","这是从资源文件中读出的字符"); //string           
      rw.Generate ( ) ;//产生资源文件 My.resources
      rw.Close ( ) ;
     
      在需要使用资源的项目中包含My.resources文件,并将My.resources文件的"生成操作"属性修改为为"嵌入的资源"。然后就可以使用嵌入的资源了。             
      //使用资源
      System.Resources.ResourceManager rm = new ResourceManager("Res.My",Assembly.GetExecutingAssembly());
      //"Res.My"中的"Res"不是创建资源的命名空间,而是包含该资源的项目(即当前项目)的命名空间。"My"则对应 "My.resources"。
      this.pictureBox1.Image = (Bitmap)rm.GetObject("abc1");
  
   注:此种资源文件的创建很类似于序列化与反序列化的过程,但又强于序列化,即资源的生成过程种用到了序列化的功能。

引用\[1\]中的代码是一个C#资源管理预览效果的示例。这段代码使用了Presentation库来预览PPT文件,并将其转换为HTML格式。具体的实现过程是通过实例化Presentation类,加载PPT文件,然后将其保存为HTML文件。最后返回HTML文件的地址。这段代码可以用于在C#应用程序中实现PPT文件的预览功能。 引用\[2\]提供了一个关于SharpShell的源码和例程的下载链接。SharpShell是一个用于创建Shell扩展的库,可以用于实现Windows资源管理器的预览处理程序。通过使用SharpShell,可以自定义资源文件的预览效果。 引用\[3\]提供了C++版和C#版的资源管理预览效果的参考链接。C++版的参考链接是关于如何构建缩略图提供程序的,而C#版的参考链接是一个示例项目,展示了如何使用SharpShell来创建自定义的资源预览扩展。这些参考链接可以帮助你更深入地了解如何实现资源管理预览效果。 综上所述,你可以使用C#和SharpShell来实现资源管理预览效果,并参考引用\[1\]中的代码来预览PPT文件。 #### 引用[.reference_title] - *1* [c#预览office文档最全面的例子](https://blog.csdn.net/qq_42638454/article/details/103577309)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [C#实现Windows资源管理器文件预览](https://blog.csdn.net/hey_zng/article/details/50925571)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [【C#资源管理器中显示自定义文件格式的缩略图】](https://blog.csdn.net/weixin_44029053/article/details/127040937)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值