我正在尝试从项目中的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中,因为它的大小。
答案 0 :(得分:0)
我怀疑问题是您用于ResourceManager
构造函数的第一个参数的字符串。
您使用" My_Project.MyFile"。为此,你必须有一个名为" MyFile.resx"的.resx资源文件。在My_Project项目中(它不是您作为资源嵌入的文件的名称)。 resx文件类似于资源管理器使用的资源目录。
要使用您拥有的代码,请将新资源文件(.resx)添加到项目中,在VS中打开它,将该文件添加为新资源,然后使用ResourceManager
将其可用