从Ressources

时间:2015-08-09 16:07:41

标签: c# wpf stream zip

我正在尝试从项目中的ressource中提取.zip文件,因此在线发现了这个使用SharpZipLib的优秀示例:

try
{
   ResourceManager objResMgr = new ResourceManager("My_Project.MyFile", Assembly.GetExecutingAssembly());
   byte[] objData = (byte[])objResMgr.GetObject("MyFile.zip");
   MemoryStream objMS = new MemoryStream(objData);
   ZipInputStream objZIP = new ZipInputStream(objMS);
   ZipEntry theEntry;
   while ((theEntry = objZIP.GetNextEntry()) != null)
   {
       FileStream streamWriter =
       File.Create(System.IO.Path.Combine("C:/", theEntry.Name));
       int size = objData.Length;
       byte[] data = new byte[size];
       while (true)
       {
           size = objZIP.Read(data, 0, data.Length);
           if (size > 0)
           {
              streamWriter.Write(data, 0, size);
           }
           else
           {
              break;
           }
      }
      streamWriter.Close();
   }
   objZIP.Close();
}
catch (Exception ex)
{
   MessageBox.Show(ex.Message);
}

问题是,当我运行我的代码时,我收到一个异常,要求我检查“My_Project.MyFile.ressources”是否已在程序集“My Project”中正确嵌入或链接。 如果我的zip的Build Action是“Ressource”或“Embedded Ressource”,则会显示。我确信zip文件最终会出现在.exe中,因为它的大小。

1 个答案:

答案 0 :(得分:0)

我怀疑问题是您用于ResourceManager构造函数的第一个参数的字符串。

您使用" My_Project.MyFile"。为此,你必须有一个名为" MyFile.resx"的.resx资源文件。在My_Project项目中(它不是您作为资源嵌入的文件的名称)。 resx文件类似于资源管理器使用的资源目录。

要使用您拥有的代码,请将新资源文件(.resx)添加到项目中,在VS中打开它,将该文件添加为新资源,然后使用ResourceManager将其可用