Question

Je voudrais incorporer un fichier texte dans un assemblage pour pouvoir charger le texte sans avoir à le lire à partir du disque et pour que tout ce dont j'ai besoin soit contenu dans l'exe. (Pour que ce soit plus portable)

Y at-il un moyen de faire cela? J'assume quelque chose avec les fichiers de ressources?

Et si vous le pouvez, comment le faites-vous et comment chargez-vous par programme le texte dans une chaîne?

Était-ce utile?

La solution

Cliquez avec le bouton droit sur le fichier du projet, sélectionnez Propriétés.

Dans la fenêtre qui s'ouvre, accédez à l'onglet Ressources et, s'il ne contient qu'un lien bleu au milieu de la page, cliquez dessus pour créer une nouvelle ressource.

entrer la description de l'image ici

Ensuite, dans la barre d'outils située au-dessus de la page à onglet, sélectionnez pour ajouter un nouveau fichier texte, nommez-le, il sera ajouté à votre projet et ouvert.

Si vous en êtes à ce stade, vous pouvez taper Ressources.TheNameYouGaveTheTextFileHere dans votre code et accéder à son contenu. Notez que la première fois que vous utilisez la classe Resources dans une classe, vous devez ajouter une directive using (appuyez sur Ctrl +. Après avoir tapé Resources pour obtenir le menu permettant à VS de le faire à votre place).

Si quelque chose n’est pas clair concernant la description ci-dessus, veuillez laisser un commentaire et je le modifierai jusqu’à ce qu’elle soit complète ou ait un sens:)

Autres conseils

Dans Visual Studio 2003, Visual Studio 2005 et éventuellement des versions antérieures (cela fonctionne également en 2008), vous pouvez inclure le fichier texte dans votre projet, puis dans le panneau "Propriétés", définissez l'action sur "Ressources incorporées". Vous pouvez ensuite accéder au fichier sous forme de flux à l'aide de Assembly.GetManifestResourceStream (string) .

Les autres réponses ici sont plus pratiques. J'inclus ceci pour être complet.

Notez que cette approche fonctionnera pour incorporer d'autres types de fichiers tels que des images, des icônes, des sons, etc.

Après avoir incorporé un fichier texte, utilisez ce fichier n'importe où dans un code comme celui-ci ...

global::packageName.Properties.Resources.ThatFileName

Oui, vous avez raison. Créez un fichier de ressources. Lorsque vous le faites, vous n'avez pas besoin de & charger; Charger " la chaîne, elle sera référencée comme Resource.WitelyStringYouDefined.

Voici ce que j'ai fait:

  1. Ajout de mes fichiers (ressources) dans Visual Studio en cliquant avec le bouton droit de la souris sur le projet.
  2. Cliquez avec le bouton droit sur chaque fichier que vous avez ajouté et modifiez le "Type de construction". aux ressources incorporées.
  3. Pour accéder à la ressource:

    a. Vous avez l'assembly actuel à l'aide de la fonction: GetExecutingAssembly ()

    b. La ressource que j'ai ajoutée était un fichier texte. Je l'ai donc lue dans un flux à l'aide de GetManifestResourceStream (nomFichier) . J'ai accédé aux noms de fichiers en appelant GetManifestResourceNames ()

    c. Utilisez maintenant une classe StreamReader () pour lire la fin du fichier dans une variable si c'est ce que vous voulez.

Voici ce qui a fonctionné pour moi. (J'avais besoin de lire le contenu d'un fichier incorporé dans un fichier image .NET exécutable.)

Avant de faire quoi que ce soit, incluez votre fichier dans votre solution dans Visual Studio. (Dans mon cas, VS 2017 Community.) Je suis passé à Explorateur de solutions , puis j'ai cliqué avec le bouton droit de la souris sur le dossier Propriétés , choisi Ajouter un élément existant et choisi. le fichier. (Dites, NomFichier.txt .) Puis, toujours dans Explorateur de solutions , cliquez avec le bouton droit sur le fichier inclus, sélectionnez Propriétés , puis sélectionnez Action de construction en tant que Ressource incorporée .

Utilisez ensuite ce code pour lire ses octets:

string strResourceName = "FileName.txt";

Assembly asm = Assembly.GetExecutingAssembly();
using( Stream rsrcStream = asm.GetManifestResourceStream(asm.GetName().Name + ".Properties." + strResourceName))
{
    using (StreamReader sRdr = new StreamReader(rsrcStream))
    {
        //For instance, gets it as text
        string strTxt = sRdr.ReadToEnd();
    }
}

Notez que dans ce cas, vous n'avez pas l'ajout de ce fichier en tant que ressource, comme cela a été proposé dans réponse acceptée .

Ajout à la réponse de Pavan, pour obtenir l'assembly actuel (dans la section générale):

Assembly _assembly;

GetManifestResourceStream (NomFichier) (dans le code, la lecture de la ressource est requise):

try
{
    _assembly = Assembly.GetExecutingAssembly();
    _textStreamReader = new StreamReader(_assembly.GetManifestResourceStream("*Namespace*.*FileName*.txt"));
}
catch
{
    Console.WritelLine("Error accessing resource!");
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top