c#从资源中读取字节数组

时间:2011-09-27 18:58:27

标签: c# bytearray

我一直在试图弄清楚如何从我的一个资源文件中读取一个字节数组,我在Google上尝试过最热门的点击而没有取得明显的成功。

我有一个文件存储在我的程序的资源集合中,我想将此文件作为字节数组读取

我目前只是使用以下代码从程序的根目录中读取文件:

FileStream fs = new FileStream(Path, FileMode.Open);
BinaryReader br = new BinaryReader(fs);
byte[] bin = br.ReadBytes(Convert.ToInt32(fs.Length));
fs.Close();
br.Close();

但是我想将此文件存储为我的应用程序中的资源,这样我就不必在程序中附加额外的文件。

此文件包含我程序部分使用的加密数据。

非常感谢任何帮助或指示!

5 个答案:

答案 0 :(得分:18)

假设您正在讨论作为程序集资源嵌入的文件:

var assembly = System.Reflection.Assembly.GetExecutingAssembly();
using (var stream = assembly.GetManifestResourceStream("SomeNamespace.somefile.png"))
{
    byte[] buffer = new byte[stream.Length];
    stream.Read(buffer, 0, buffer.Length);
    // TODO: use the buffer that was read
}

答案 1 :(得分:15)

您可以通过项目属性,“资源”选项卡(如果需要,创建一个),添加资源(现有文件),为应用程序添加资源。添加文件后,可以将其FileType(在其属性中)设置为Binary。

Documentation

之后,您可以轻松地以字节[]的形式访问您的文件:

var myByteArray = Properties.Resources.MyFile;

答案 2 :(得分:0)

也许您可以尝试使用StreamResourceInfo。这是一个Silverlight示例的链接,但如果我没有弄错,您应该能够在任何.NET应用程序中应用相同的原则:

http://msdn.microsoft.com/en-us/library/system.windows.resources.streamresourceinfo(v=VS.95).aspx

的问候,
Anders @ Cureos

答案 3 :(得分:0)

这是我们为此目的使用的一个小课程:

static class EmbeddedResource
{
    /// <summary>
    /// Extracts an embedded file out of a given assembly.
    /// </summary>
    /// <param name="assemblyName">The namespace of your assembly.</param>
    /// <param name="fileName">The name of the file to extract.</param>
    /// <returns>A stream containing the file data.</returns>
    public static Stream Open(string assemblyName, string fileName)
    {
        var asm = Assembly.Load(assemblyName);
        var stream = asm.GetManifestResourceStream(assemblyName + "." + fileName);

        if (stream == null)
            throw new ConfigurationErrorsException(String.Format(
                    Strings.MissingResourceErrorFormat, fileName, assemblyName));

        return stream;
    }
}

用法非常简单:

using (var stream = EmbeddedResource.Open("Assembly.Name", "ResourceName"))
    // do stuff

答案 4 :(得分:0)

var rm = new ResourceManager("RessourceFile", typeof(ClassXY).Assembly);
return Encoding.UTF8.GetBytes(rm.GetString("key"));