47 votes

Répertorier toutes les ressources intégrées dans un dossier

Dans ma solution, j'avais un dossier avec quelques fichiers. Tous ces fichiers ont l'action de génération "Ressource intégrée".

Avec ce code je peux obtenir un fichier :

 assembly.GetManifestResourceStream(assembly.GetName().Name + ".Folder.File.txt");

Mais existe-t-il un moyen d'obtenir tous les *.txt dans ce dossier ? Une liste de noms ou une méthode pour les parcourir tous ?

97voto

marc_s Points 321990

Tu pourrais vérifier

 assembly.GetManifestResourceNames()

qui renvoie un tableau de chaînes de toutes les ressources contenues. Vous pouvez ensuite filtrer cette liste pour trouver tous vos *.txt stockés en tant que ressources intégrées.

Voir la documentation MSDN pour GetManifestResourceNames pour plus de détails.

19voto

dbvega Points 41

Essayez ceci, renvoie un tableau avec tous les fichiers .txt dans le répertoire Folder.

 private string[] GetAllTxt()
{
    var executingAssembly = Assembly.GetExecutingAssembly();
    string folderName = string.Format("{0}.Resources.Folder", executingAssembly.GetName().Name);
    return executingAssembly
        .GetManifestResourceNames()
        .Where(r => r.StartsWith(folderName) && r.EndsWith(".txt"))
        //.Select(r => r.Substring(folderName.Length + 1))
        .ToArray();
}

REMARQUE : Décommentez la ligne //.Select(... afin d'obtenir le nom du fichier.

5voto

masterchris_99 Points 2303

essaie avec ça. ici vous obtenez tous les fichiers

 string[] embeddedResources = Assembly.GetAssembly(typeof(T)).GetManifestResourceNames();

T est bien sûr votre type. donc vous pouvez l'utiliser générique

-3voto

WhiteflyDev Points 27

Je viens de déchiffrer ceci, utilisez:

 Assembly _assembly;
_assembly = Assembly.GetExecutingAssembly();
List<string> filenames = new List<string>();
filenames = _assembly.GetManifestResourceNames().ToList<string>();
List<string> txtFiles = new List<string>();
for (int i = 0; i < filenames.Count(); i++)
{
    string[] items = filenames.ToArray();
    if (items[i].ToString().EndsWith(".txt"))
    {
        txtFiles.Add(items[i].ToString());
    }
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X