namespace Unosquare.RaspberryIO.Resources { using Native; using Swan; using System; using System.Collections.ObjectModel; using System.IO; /// /// Provides access to embedded assembly files /// internal static class EmbeddedResources { /// /// Initializes static members of the class. /// static EmbeddedResources() { ResourceNames = new ReadOnlyCollection(typeof(EmbeddedResources).Assembly().GetManifestResourceNames()); } /// /// Gets the resource names. /// /// /// The resource names. /// public static ReadOnlyCollection ResourceNames { get; } /// /// Extracts all the file resources to the specified base path. /// public static void ExtractAll() { var basePath = Runtime.EntryAssemblyDirectory; var executablePermissions = Standard.StringToInteger("0777", IntPtr.Zero, 8); foreach (var resourceName in ResourceNames) { var filename = resourceName.Substring($"{typeof(EmbeddedResources).Namespace}.".Length); var targetPath = Path.Combine(basePath, filename); if (File.Exists(targetPath)) return; using (var stream = typeof(EmbeddedResources).Assembly() .GetManifestResourceStream($"{typeof(EmbeddedResources).Namespace}.{filename}")) { using (var outputStream = File.OpenWrite(targetPath)) { stream?.CopyTo(outputStream); } try { Standard.Chmod(targetPath, (uint)executablePermissions); } catch { /* Ignore */ } } } } } }