My question is:
Is there a way to convert a resource directly to byte array without writing to disk?
The code is:
using System;
using System.IO;
using System.Reflection;
namespace VCSKicks
{
public static class ResourceHelper
{
public static string GetEmbeddedResource(string resourceName)
{
return GetEmbeddedResource(resourceName, Assembly.GetCallingAssembly());
}
public static byte[] GetEmbeddedResourceAsBytes(string resourceName)
{
return GetEmbeddedResourceAsBytes(resourceName, Assembly.GetCallingAssembly());
}
public static string GetEmbeddedResource(string resourceName, Assembly assembly)
{
resourceName = FormatResourceName(assembly, resourceName);
using (Stream resourceStream = assembly.GetManifestResourceStream(resourceName))
{
if (resourceStream == null)
return null;
using (StreamReader reader = new StreamReader(resourceStream))
{
return reader.ReadToEnd();
}
}
}
public static byte[] GetEmbeddedResourceAsBytes(string resourceName, Assembly assembly)
{
using (Stream resourceStream = assembly.GetManifestResourceStream(resourceName))
{
byte[] content = new byte[resourceStream.Length];
resourceStream.Read(content, 0, content.Length);
return content;
}
}
private static string FormatResourceName(Assembly assembly, string resourceName)
{
return assembly.GetName().Name + "." + resourceName.Replace(" ", "_").Replace("\", ".").Replace("/", ".");
}
}
}