Comment lire une ressource incorporée (fichier texte) en l'utilisant StreamReader
et la renvoyer sous forme de chaîne? Mon script actuel utilise un formulaire et une zone de texte Windows qui permettent à l'utilisateur de rechercher et de remplacer du texte dans un fichier texte qui n'est pas incorporé.
private void button1_Click(object sender, EventArgs e)
{
StringCollection strValuesToSearch = new StringCollection();
strValuesToSearch.Add("Apple");
string stringToReplace;
stringToReplace = textBox1.Text;
StreamReader FileReader = new StreamReader(@"C:\MyFile.txt");
string FileContents;
FileContents = FileReader.ReadToEnd();
FileReader.Close();
foreach (string s in strValuesToSearch)
{
if (FileContents.Contains(s))
FileContents = FileContents.Replace(s, stringToReplace);
}
StreamWriter FileWriter = new StreamWriter(@"MyFile.txt");
FileWriter.Write(FileContents);
FileWriter.Close();
}
la source
Environment.SpecialFolder
pour obtenir le dossier du bureau. Vous devez garder à l'esprit que la ressource sera à espace de noms en fonction de son chemin dans le projet, donc son nom peut ne pas être justefile1.txt
.GetManifestResourceStream
besoin du chemin comme l'indique @adrian. Si cela peut aider tout le monde, ce chemin est comme ce @SimpleCoder montre dans l'exemple:MyNamespace.Filename.Ext
. J'avais déjà essayéMyNamespace.Resources.Filename.Ext
mais cela se traduit par un null.using (StreamReader reader = new StreamReader(stream, Encoding.UTF8))
Vous pouvez ajouter un fichier en tant que ressource à l'aide de deux méthodes distinctes.
Le code C # requis pour accéder au fichier est différent , selon la méthode utilisée pour ajouter le fichier en premier lieu.
Méthode 1: ajouter un fichier existant, définir la propriété sur
Embedded Resource
Ajoutez le fichier à votre projet, puis définissez le type sur
Embedded Resource
.REMARQUE: si vous ajoutez le fichier à l'aide de cette méthode, vous pouvez utiliser
GetManifestResourceStream
pour y accéder (voir la réponse de @dtb ).Méthode 2: ajouter un fichier à
Resources.resx
Ouvrez le
Resources.resx
fichier, utilisez la liste déroulante pour ajouter le fichier, définissezAccess Modifier
surpublic
.REMARQUE: si vous ajoutez le fichier à l'aide de cette méthode, vous pouvez l'utiliser
Properties.Resources
pour y accéder (voir la réponse de @Night Walker ).la source
Resource
ne fait rien qui vous permet de lire l'élément en tant que ressource? vous devez utiliserEmbeddedResource
ou ajouter à unResources.resx
fichier?Properties.Resources.Your_resource_name
écrire ceci:Properties.Resources.ResourceManager.GetObject("Your_resource_name")
.Fondamentalement, vous utilisez
System.Reflection
pour obtenir une référence à l'assembly actuel. Ensuite, vous utilisezGetManifestResourceStream()
.Exemple, à partir de la page que j'ai publiée:
Remarque : besoin d'ajouter
using System.Reflection;
pour que cela fonctionnela source
namespace
dans le nom de la ressourcevar auxList= System.Reflection.Assembly.GetExecutingAssembly().GetManifestResourceNames();
Cette méthode peut être très utile lorsque vous souhaitez connaître le nom exact de la ressource. (Tiré de la question stackoverflow.com/questions/27757/… )Dans Visual Studio, vous pouvez directement intégrer l'accès à une ressource de fichier via l'onglet Ressources des propriétés du projet («Analytics» dans cet exemple).
Le fichier résultant est ensuite accessible sous forme de tableau d'octets par
Si vous en avez besoin en tant que flux, (à partir de https://stackoverflow.com/a/4736185/432976 )
la source
Lorsque vous avez ajouté le fichier aux ressources, vous devez sélectionner ses modificateurs d'accès en tant que public afin de créer quelque chose comme le suivant.
CLIST01 est le nom du fichier incorporé.
En fait, vous pouvez aller dans resources.Designer.cs et voir quel est le nom du getter.
la source
Action
surIncorporated ressource
, je n'ai aucunAccess Modifiers
champ dans le panneau des propriétés. De plus, je n'ai pas dePropersites.Resources
classe, j'obtiens uneThe name 'Properties' does not exist in the current context
erreur lors de la compilation de votre code.Resources.resx
, voyez ma réponse sur les différentes méthodes pour incorporer des fichiers dans un projet.ajout par exemple du menu Projet Testfile.sql -> Propriétés -> Ressources -> Ajouter un fichier existant
la source
Je sais que c'est un vieux fil, mais c'est ce qui a fonctionné pour moi:
lire le texte comme ceci:
Le texte que j'ai ajouté aux ressources: «SomeText.txt»
la source
Vous pouvez également utiliser cette version simplifiée de la réponse de @ dtb:
la source
Quelque chose que j'ai appris tout à l'heure est que votre fichier n'est pas autorisé à avoir un "." (point) dans le nom de fichier.
Templates.plainEmailBodyTemplate-en.txt -> Fonctionne !!!
Templates.plainEmailBodyTemplate.en.txt -> ne fonctionne pas via GetManifestResourceStream ()
Probablement parce que le cadre se confond entre les espaces de noms et le nom de fichier ...
la source
Par tous vos pouvoirs combinés, j'utilise cette classe d'assistance pour lire les ressources de n'importe quel assemblage et de tout espace de noms de manière générique.
la source
J'ai lu une utilisation de fichier texte de ressource intégrée:
Échantillon:
la source
Je sais que c'est vieux, mais je voulais juste souligner pour NETMF (.Net MicroFramework), vous pouvez facilement le faire:
Depuis NETMF n'a pas
GetManifestResourceStream
la source
Après avoir lu toutes les solutions publiées ici. Voici comment je l'ai résolu:
la source
La réponse est assez simple, faites-le simplement si vous avez ajouté le fichier directement à partir du fichier resources.resx.
Avec cette ligne de code, le texte du fichier est directement lu dans le fichier et placé dans la variable de chaîne.
la source
J'étais ennuyé que vous deviez toujours inclure l'espace de noms et le dossier dans la chaîne. Je voulais simplifier l'accès aux ressources embarquées. C'est pourquoi j'ai écrit ce petit cours. N'hésitez pas à utiliser et à améliorer!
Usage:
Classe:
la source
Certains types de projets VS .NET ne génèrent pas automatiquement un fichier .NET (.resx). Les étapes suivantes ajoutent un fichier de ressources à votre projet:
Resources
.Vous pouvez maintenant ajouter un fichier texte en tant que ressource, par exemple un fichier xml:
Resources
a une propriété de typestring
qui porte le nom du fichier inclus. Si le nom du fichier est par exemple RibbonManifest.xml, la propriété doit avoir le nomRibbonManifest
. Vous trouvez le nom exact dans le fichier de code Resources.Designer.cs.string xml = Resources.RibbonManifest
. La forme générale estResourceFileName.IncludedTextFileName
. Ne l'utilisez pasResourceManager.GetString
car la fonction get de la propriété string l'a déjà fait.la source
la source
Il s'agit d'une classe que vous pourriez trouver très pratique pour lire les fichiers de ressources intégrés à partir de la version actuelle
Assembly
:la source
Pour toutes les personnes qui veulent rapidement le texte d'un fichier codé en dur dans Winforms;
Resources.<name of resource>.toString();
de lire le fichier.Je ne recommanderais pas cela comme meilleure pratique ou quoi que ce soit, mais cela fonctionne rapidement et fait ce qu'il doit faire.
la source
Pour les utilisateurs qui utilisent VB.Net
où
MyApplicationName
est l'espace de noms de mon application. Ce n'est pas le nom de l'assembly. Ce nom est défini dans les propriétés du projet (onglet Application).Si vous ne trouvez pas le nom de ressource correct, vous pouvez utiliser la
GetManifestResourceNames()
fonctionou
ou
la source
Lisez le fichier TXT intégré lors de l'événement de chargement de formulaire.
Définissez les variables dynamiquement.
Appelez un Try Catch.
Créer un vide pour IncludeText (), Visual Studio fait cela pour vous. Cliquez sur l'ampoule pour générer automatiquement le CodeBlock.
Mettez ce qui suit à l'intérieur du bloc de code généré
Ressource 1
Ressource 2
Ressource 3
Si vous souhaitez envoyer la variable renvoyée ailleurs, appelez simplement une autre fonction et ...
Ce que cela a réalisé, c'est une méthode pour combiner plusieurs fichiers txt et lire leurs données incorporées, dans une seule zone de texte riche. ce qui était mon effet souhaité avec cet échantillon de code.
la source