Comment lire un fichier texte en ressource incorporée

Comment lire un fichier texte en ressource incorporée


Source : Stack Overflow [visual-studio]

Vous pouvez utiliser la méthode Assembly.GetManifestResourceStream :

Ajoutez les usings suivants

 using System.IO;
 using System.Reflection;

Définissez la propriété du fichier concerné :

Paramètre Build Action avec la valeur Embedded Resource

Utilisez le code suivant

 var assembly = Assembly.GetExecutingAssembly();
 var resourceName = "MyCompany.MyProduct.MyFile.txt";

 using (Stream stream = assembly.GetManifestResourceStream(resourceName))
 using (StreamReader reader = new StreamReader(stream))
 {
     string result = reader.ReadToEnd();
 }

resourceName est le nom de l’une des ressources incorporées dans assembly.
Par exemple, si vous incorporez un fichier texte nommé "MyFile.txt" placé à la racine d’un projet avec l’espace de noms par défaut "MyCompany.MyProduct", alors resourceName est "MyCompany.MyProduct.MyFile.txt".
Vous pouvez obtenir la liste de toutes les ressources d’un assembly en utilisant la méthode Assembly.GetManifestResourceNames.

Une astuce évidente pour obtenir le resourceName à partir du nom de fichier uniquement (en contournant la logique d’espace de noms) :

string resourceName = assembly.GetManifestResourceNames()
  .Single(str => str.EndsWith("YourFileName.txt"));

Un exemple complet :

`public string ReadResource(string name)
{
// Determine path
var assembly = Assembly.GetExecutingAssembly();
string resourcePath = name;
// Format: “{Namespace}.{Folder}.{filename}.{Extension}”
if (!name.StartsWith(nameof(SignificantDrawerCompiler)))
{
resourcePath = assembly.GetManifestResourceNames()
.Single(str => str.EndsWith(name));
}

using (Stream stream = assembly.GetManifestResourceStream(resourcePath))
using (StreamReader reader = new StreamReader(stream))
{

(Réponse tronquée)