Wie lese ich eine eingebettete Ressource (Textdatei) mit StreamReader
und gebe sie als Zeichenfolge zurück? Mein aktuelles Skript verwendet ein Windows-Formular und ein Textfeld, mit denen der Benutzer Text in einer nicht eingebetteten Textdatei suchen und ersetzen kann.
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();
}
quelle
Environment.SpecialFolder
sich den Desktop-Ordner an. Sie müssen berücksichtigen, dass die Ressource basierend auf ihrem Pfad innerhalb des Projekts einen Namespace aufweist, sodass ihr Name möglicherweise nicht gerecht istfile1.txt
.GetManifestResourceStream
benötigt den Pfad, wie @adrian angibt. Wenn es jemandem hilft, entspricht dieser Pfad dem, was @SimpleCoder im Beispiel zeigt :MyNamespace.Filename.Ext
. Ich hatte es zuvor versucht,MyNamespace.Resources.Filename.Ext
aber das führt zu einer Null.using (StreamReader reader = new StreamReader(stream, Encoding.UTF8))
Sie können eine Datei mit zwei separaten Methoden als Ressource hinzufügen.
Der für den Zugriff auf die Datei erforderliche C # -Code unterscheidet sich je nach der Methode, mit der die Datei zuerst hinzugefügt wurde.
Methode 1: Vorhandene Datei hinzufügen, Eigenschaft auf setzen
Embedded Resource
Fügen Sie die Datei Ihrem Projekt hinzu und setzen Sie den Typ auf
Embedded Resource
.HINWEIS: Wenn Sie die Datei mit dieser Methode hinzufügen, können Sie
GetManifestResourceStream
darauf zugreifen (siehe Antwort von @dtb ).Methode 2: Datei hinzufügen zu
Resources.resx
Öffnen Sie die
Resources.resx
Datei, verwenden Sie die Dropdown - Box die Datei hinzuzufügen, SatzAccess Modifier
zupublic
.HINWEIS: Wenn Sie die Datei mit dieser Methode hinzufügen, können Sie
Properties.Resources
darauf zugreifen (siehe Antwort von @Night Walker ).quelle
Resource
, können Sie das Element nicht als Ressource auslesen. Sie müssenEmbeddedResource
eineResources.resx
Datei verwenden oder hinzufügen ?Properties.Resources.Your_resource_name
schreiben Sie Folgendes :Properties.Resources.ResourceManager.GetObject("Your_resource_name")
.Grundsätzlich verwenden Sie
System.Reflection
, um einen Verweis auf die aktuelle Assembly zu erhalten. Dann benutzt duGetManifestResourceStream()
.Beispiel von der Seite, die ich gepostet habe:
Hinweis : Sie müssen hinzufügen,
using System.Reflection;
damit dies funktioniertquelle
namespace
als Teil des Ressourcennamensvar auxList= System.Reflection.Assembly.GetExecutingAssembly().GetManifestResourceNames();
Diese Methode kann sehr nützlich sein, wenn Sie den genauen Ressourcennamen erfahren möchten. (Entnommen aus Frage stackoverflow.com/questions/27757/… )In Visual Studio können Sie den Zugriff auf eine Dateiressource direkt über die Registerkarte Ressourcen der Projekteigenschaften (in diesem Beispiel "Analytics") einbetten.
Auf die resultierende Datei kann dann als Byte-Array von zugegriffen werden
Sollten Sie es als Stream benötigen, dann (von https://stackoverflow.com/a/4736185/432976 )
quelle
Wenn Sie die Datei zu den Ressourcen hinzugefügt haben, sollten Sie die Zugriffsmodifikatoren als öffentlich auswählen, damit Sie Folgendes tun können.
CLIST01 ist der Name der eingebetteten Datei.
Tatsächlich können Sie zu resources.Designer.cs gehen und sehen, wie der Getter heißt.
quelle
Action
aufIncorporated ressource
, ich habe keinAccess Modifiers
Feld im Panel Eigenschaften. Außerdem habe ich keinePropersites.Resources
Klasse.The name 'Properties' does not exist in the current context
Beim Kompilieren Ihres Codes wird eine Fehlermeldung angezeigt.Resources.resx
. Siehe meine Antwort zu den verschiedenen Methoden zum Einbetten von Dateien in ein Projekt.Hinzufügen zB Testfile.sql Projektmenü -> Eigenschaften -> Ressourcen -> Vorhandene Datei hinzufügen
quelle
Ich weiß, dass es ein alter Thread ist, aber das hat bei mir funktioniert:
Lesen Sie den Text folgendermaßen:
Der Text, den ich zu den Ressourcen hinzugefügt habe: 'SomeText.txt'
quelle
Sie können auch diese vereinfachte Version der Antwort von @ dtb verwenden:
quelle
Ich habe gerade gelernt, dass Ihre Datei kein "" haben darf. (Punkt) im Dateinamen.
Templates.plainEmailBodyTemplate-de.txt -> Funktioniert !!!
Templates.plainEmailBodyTemplate.en.txt -> funktioniert nicht über GetManifestResourceStream ()
Wahrscheinlich, weil das Framework zwischen Namespaces und Dateinamen verwechselt wird ...
quelle
Bei all Ihren Kräften zusammen verwende ich diese Hilfsklasse, um Ressourcen aus jeder Assembly und jedem Namespace generisch zu lesen.
quelle
Ich habe eine eingebettete Ressourcentextdatei gelesen.
Stichprobe:
quelle
Ich weiß, dass dies alt ist, aber ich wollte nur auf NETMF (.Net MicroFramework) hinweisen. Sie können dies einfach tun:
Da hat NETMF nicht
GetManifestResourceStream
quelle
Nachdem Sie alle hier veröffentlichten Lösungen gelesen haben. So habe ich es gelöst:
quelle
Die Antwort ist ganz einfach. Tun Sie dies einfach, wenn Sie die Datei direkt aus der Datei resources.resx hinzugefügt haben.
Mit dieser Codezeile wird der Text aus der Datei direkt aus der Datei gelesen und in die Zeichenfolgenvariable eingefügt.
quelle
Ich war verärgert, dass Sie immer den Namespace und den Ordner in die Zeichenfolge aufnehmen mussten. Ich wollte den Zugriff auf die eingebetteten Ressourcen vereinfachen. Deshalb habe ich diese kleine Klasse geschrieben. Fühlen Sie sich frei zu verwenden und zu verbessern!
Verwendungszweck:
Klasse:
quelle
Einige VS .NET-Projekttypen generieren keine .NET-Datei (.resx) automatisch. Mit den folgenden Schritten fügen Sie Ihrem Projekt eine Ressourcendatei hinzu:
Resources
.Jetzt können Sie eine Textdatei als Ressource hinzufügen, beispielsweise eine XML-Datei:
Resources
über eine Eigenschaft vom Typstring
, die nach der enthaltenen Datei benannt ist. Wenn der Dateiname z. B. RibbonManifest.xml lautet, sollte die Eigenschaft den Namen habenRibbonManifest
. Den genauen Namen finden Sie in der Codedatei Resources.Designer.cs.string xml = Resources.RibbonManifest
. Die allgemeine Form istResourceFileName.IncludedTextFileName
. Nicht verwenden,ResourceManager.GetString
da die get-Funktion der String-Eigenschaft dies bereits getan hat.quelle
quelle
Dies ist eine Klasse, die Sie möglicherweise sehr praktisch finden, um eingebettete Ressourcendateien aus der aktuellen zu lesen
Assembly
:quelle
Für alle Leute, die nur schnell den Text einer fest codierten Datei in Winforms wollen;
Resources.<name of resource>.toString();
lesen Sie einfach die Datei.Ich würde dies nicht als Best Practice oder so empfehlen, aber es funktioniert schnell und macht das, was es tun muss.
quelle
Für Benutzer, die VB.Net verwenden
Wo
MyApplicationName
ist der Namespace meiner Anwendung? Es ist nicht der Assemblyname. Dieser Name wird in den Projekteigenschaften (Registerkarte Anwendung) definiert.Wenn Sie den richtigen Ressourcennamen nicht finden, können Sie die
GetManifestResourceNames()
Funktion verwendenoder
oder
quelle
Lesen Sie die eingebettete TXT-Datei beim Laden des Formulars.
Stellen Sie die Variablen dynamisch ein.
Rufen Sie einen Try Catch an.
Void für IncludeText () erstellen, Visual Studio erledigt dies für Sie. Klicken Sie auf die Glühbirne, um den CodeBlock automatisch zu generieren.
Fügen Sie Folgendes in den generierten Codeblock ein
Ressource 1
Ressource 2
Ressource 3
Wenn Sie die zurückgegebene Variable an einen anderen Ort senden möchten, rufen Sie einfach eine andere Funktion auf und ...
Dies wurde erreicht, eine Methode, um mehrere txt-Dateien zu kombinieren und ihre eingebetteten Daten in einem einzigen Rich-Text-Feld zu lesen. Das war mein gewünschter Effekt mit diesem Code-Beispiel.
quelle