2010-04-25 62 views
0

最近研究vb.net,但我仍然没有想出如何从资源中删除图像或可执行文件。 如果我把一个图像,并添加到资源,我会提取 C:\ foto.jpg 我该怎么办? 在此先感谢,我为我的VB知识道歉是英语VB.NET帮助资源

回答

0

你可以使用GetManifestResourceStream方法获取嵌入图像的流,在缓冲区中读取该流,并将其写入使用WriteAllBytes方法的光盘:

Using Stream = Assembly.GetExecutingAssembly().GetManifestResourceStream("AssemblyName.image.jpg") 
    Dim Buffer(Stream.Length) As Byte 
    Stream.Read(Buffer, 0, Buffer.Length) 
    File.WriteAllBytes("image.jpg", Buffer) 
End Using 

这应该适用于小文件,但如果你有嵌入的程序集里面的一些非常大的文件,这将是更好的阅读它们的块,以避免消耗大量的内存:

Using stream As Stream = Assembly.GetExecutingAssembly.GetManifestResourceStream("AssemblyName.image.jpg") 
    Using fileStream As FileStream = File.Create("image.jpg") 
     Dim bytesRead As Integer 
     Dim buf As Byte() = New Byte(1023) {} 
     Do While (bytesRead = stream.Read(buf, 0, buf.Length) > 0) 
      Dim actual As Byte() = New Byte(bytesRead - 1) {} 
      Buffer.BlockCopy(buf, 0, actual, 0, actual.Length) 
      fileStream.Write(actual, 0, actual.Length) 
     Loop 
    End Using 
End Using 
+0

对象参照的文ce未设置为对象的实例 line Dim Buffer(Stream.Length)As Byte – user325439 2010-04-25 16:30:54

+0

发生这种情况是因为您没有指定嵌入资源的正确名称。例如,如果当前程序集名为'AssemblyName',并且在根目录下嵌入了'image.jpg',则资源的名称将为'AssemblyName.image.jpg'。用反射器打开生成的程序集并查看嵌入的资源部分,看看准确的名称是什么。 – 2010-04-25 16:35:55

+0

还是什么都没有,反正我也会包含可执行文件。埃克“ 我为我的无知道歉,但你可以发布详细的指南?? 在此先感谢 – user325439 2010-04-25 18:39:01