864 Stimmen

Wie lese ich eine eingebettete Ressource-Textdatei?

Wie lese ich eine eingebettete Ressource (Textdatei) mit StreamReader und als Zeichenkette zurückgeben? Mein aktuelles Skript verwendet ein Windows-Formular und ein Textfeld, mit dem 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();
}

0voto

Swat Punkte 45

Für alle, die nur schnell den Text einer hartkodierten Datei in Winforms haben wollen;

  1. Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf Ihre Anwendung > Ressourcen > Ihre Datei hinzufügen.
  2. Klicken Sie darauf, und stellen Sie auf der Registerkarte "Eigenschaften" den "Dateityp" auf "Text" ein.
  3. In Ihrem Programm machen Sie einfach Resources.<name of resource>.toString(); um die Datei zu lesen.

Ich würde dies nicht als bestes Verfahren empfehlen, aber es funktioniert schnell und tut, was es tun muss.

-1voto

MasterCassidy Punkte 49

Lesen einer eingebetteten TXT-DATEI beim Formular-Ladevorgang.

Setzen Sie die Variablen dynamisch.

string f1 = "AppName.File1.Ext";
string f2 = "AppName.File2.Ext";
string f3 = "AppName.File3.Ext";

Rufen Sie einen Try Catch auf.

try 
{
     IncludeText(f1,f2,f3); 
     /// Pass the Resources Dynamically 
     /// through the call stack.
}

catch (Exception Ex)
{
     MessageBox.Show(Ex.Message);  
     /// Error for if the Stream is Null.
}

Erstellen Sie Void für IncludeText(), Visual Studio tut dies für Sie. Klicken Sie auf die Glühbirne, um den CodeBlock automatisch zu generieren.

Fügen Sie innerhalb des generierten Codeblocks Folgendes ein

Ressource 1

var assembly = Assembly.GetExecutingAssembly();
using (Stream stream = assembly.GetManifestResourceStream(file1))
using (StreamReader reader = new StreamReader(stream))
{
string result1 = reader.ReadToEnd();
richTextBox1.AppendText(result1 + Environment.NewLine + Environment.NewLine );
}

Ressource 2

var assembly = Assembly.GetExecutingAssembly();
using (Stream stream = assembly.GetManifestResourceStream(file2))
using (StreamReader reader = new StreamReader(stream))
{
string result2 = reader.ReadToEnd();
richTextBox1.AppendText(
result2 + Environment.NewLine + 
Environment.NewLine );
}

Ressource 3

var assembly = Assembly.GetExecutingAssembly();
using (Stream stream = assembly.GetManifestResourceStream(file3))

using (StreamReader reader = new StreamReader(stream))
{
    string result3 = reader.ReadToEnd();
    richTextBox1.AppendText(result3);
}

Wenn Sie die zurückgegebene Variable an eine andere Stelle senden möchten, rufen Sie einfach eine andere Funktion auf und...

using (StreamReader reader = new StreamReader(stream))
{
    string result3 = reader.ReadToEnd();
    ///richTextBox1.AppendText(result3);
    string extVar = result3;

    /// another try catch here.

   try {

   SendVariableToLocation(extVar)
   {
         //// Put Code Here.
   }

       }

  catch (Exception ex)
  {
    Messagebox.Show(ex.Message);
  }

}

Was dies erreicht war dies, eine Methode, um mehrere txt-Dateien zu kombinieren, und lesen ihre eingebetteten Daten, in einem einzigen Rich-Text-Box.

-1voto

schlebe Punkte 2712

Für Benutzer, die VB.Net verwenden

Imports System.IO
Imports System.Reflection

Dim reader As StreamReader
Dim ass As Assembly = Assembly.GetExecutingAssembly()
Dim sFileName = "MyApplicationName.JavaScript.js" 
Dim reader = New StreamReader(ass.GetManifestResourceStream(sFileName))
Dim sScriptText = reader.ReadToEnd()
reader.Close()

wobei MyApplicationName ist der Namespace meiner Anwendung. Es ist nicht der Name der Baugruppe. Dieser Name ist in den Projekteigenschaften (Registerkarte Anwendung) definiert.

Wenn Sie den richtigen Ressourcennamen nicht finden, können Sie GetManifestResourceNames() fonction

Dim resourceName() As String = ass.GetManifestResourceNames()

o

Dim sName As String 
    = ass.GetManifestResourceNames()
        .Single(Function(x) x.EndsWith("JavaScript.js"))

o

Dim sNameList 
    = ass.GetManifestResourceNames()
        .Where(Function(x As String) x.EndsWith(".js"))

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X