将嵌入式资源读入字节数组(C#)时出错
我有一个名为“Test.exe”的嵌入式资源。我想做以下工作:将嵌入式资源读入字节数组(C#)时出错,c#,.net,arrays,resources,embedded-resource,C#,.net,Arrays,Resources,Embedded Resource,我有一个名为“Test.exe”的嵌入式资源。我想做以下工作: 将Test.exe的内容读入字节数组 将Test.exe(现在是字节数组)的内容写入新位置(C:\Test.exe) 我正在使用下面的代码(在这个网站上找到)——但问题是“s”总是返回空值。我使用的代码如下:byte[]b=ReadResource(“Test.exe”) 公共静态字节[]ReadResource(字符串resourceName) { 使用(流s=Assembly.GetExecutionGassembly().Ge
byte[]b=ReadResource(“Test.exe”)代码>
公共静态字节[]ReadResource(字符串resourceName)
{
使用(流s=Assembly.GetExecutionGassembly().GetManifestResourceStream(resourceName))
{
字节[]缓冲区=新字节[1024];
使用(MemoryStream ms=new MemoryStream())
{
while(true)
{
int read=s.read(buffer,0,buffer.Length);
if(read您需要指定资源的全名。例如,如果您的应用程序名为Foo
:
byte[] b = ReadResource("Foo.Test.exe");
实际上,最简单的方法是使用Reflector打开程序集并查看嵌入资源的确切名称。在应用程序名称和资源名称之间可能有一个命名空间
如果您没有Reflector(是的,它变成了付费产品),要找到嵌入式资源的名称,您可以使用以下代码:
foreach (var res in Assembly.GetExecutingAssembly().GetManifestResourceNames())
{
Console.WriteLine(res);
}
获得嵌入资源的确切名称后,将其传递给ReadResource
方法
作为另一种选择,您可以使用并双击将显示所有嵌入资源的清单。您需要指定资源的全名。例如,如果您的应用程序被称为Foo
:
byte[] b = ReadResource("Foo.Test.exe");
File.WriteAllBytes("C:\\test1.exe", Resources.TestFile);
实际上,最简单的方法是使用Reflector打开程序集并查看嵌入资源的确切名称。在应用程序名称和资源名称之间可能有一个命名空间
如果您没有Reflector(是的,它变成了付费产品),要找到嵌入式资源的名称,您可以使用以下代码:
foreach (var res in Assembly.GetExecutingAssembly().GetManifestResourceNames())
{
Console.WriteLine(res);
}
获得嵌入资源的确切名称后,将其传递给ReadResource
方法
作为另一种选择,您可以使用并双击清单
,该清单将显示所有嵌入的资源。如果使用“键入的”资源,您可以使用一行代码来完成此操作
File.WriteAllBytes("C:\\test1.exe", Resources.TestFile);
要添加类型化资源,请执行以下操作:
- 转到项目属性
资源
选项卡
- 选择
文件
作为资源类型
- 将可执行文件添加到资源中
- 现在,您可以通过
Resources.TestFile
如果使用“类型化”资源,则只需一行代码即可完成此操作
File.WriteAllBytes("C:\\test1.exe", Resources.TestFile);
要添加类型化资源,请执行以下操作:
- 转到项目属性
资源
选项卡
- 选择
文件
作为资源类型
- 将可执行文件添加到资源中
- 现在,您可以通过
Resources.TestFile
什么是reflector?那是第三方应用程序吗?你可以使用ILSpy作为reflector的免费替代品。什么是reflector?那是第三方应用程序吗?你可以使用ILSpy作为reflector的免费替代品。这是一个很好的回答。谢谢你-只是出于好奇,如果这是一个不太容易?@Evan-嗯…让生活变得更困难我猜:)@Evan-那么你选择了艰难的方式?:)不太容易,但他确实回答了我的问题:)对不起,我帮不上忙:(.这是一个很好的回答。谢谢你-只是出于好奇,如果这个方法这么简单的话,为什么会有人用其他方法添加一个可执行文件作为资源?@Evan-hmmm…让生活更困难我猜:)@Evan-那么你选择了艰难的方式不太清楚,但他确实回答了我的问题:)对不起,我帮不了忙:(。