using Unosquare.RaspberryIO.Native; using Unosquare.Swan; using System; using System.Collections.ObjectModel; using System.IO; namespace Unosquare.RaspberryIO.Resources { /// /// 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() { String basePath = Runtime.EntryAssemblyDirectory; Int32 executablePermissions = Standard.StringToInteger("0777", IntPtr.Zero, 8); foreach(String resourceName in ResourceNames) { String filename = resourceName.Substring($"{typeof(EmbeddedResources).Namespace}.".Length); String targetPath = Path.Combine(basePath, filename); if(File.Exists(targetPath)) { return; } using(Stream stream = typeof(EmbeddedResources).Assembly().GetManifestResourceStream($"{typeof(EmbeddedResources).Namespace}.{filename}")) { using(FileStream outputStream = File.OpenWrite(targetPath)) { stream?.CopyTo(outputStream); } try { _ = Standard.Chmod(targetPath, (UInt32)executablePermissions); } catch { /* Ignore */ } } } } } }