none
[C#]eine .txt Datei mit Isolated Storage laden RRS feed

  • Frage

  • Hallo,

    ich möchte eine .txt Datei auslesen und diese dann anzeigen lassen.

    Ich habe diesen Code gefunden mit dem man das machen kann.

    var resource = Application.GetResourceStream(new Uri(@"/Dein_Projekt_Name;component/DateiName.txt", UriKind.Relative));
                StreamReader streamReader = new StreamReader(resource.Stream);
                TextBlock textBlock = new TextBlock();
                textBlock.TextWrapping = TextWrapping.Wrap;
                textBlock.Text = streamReader.ReadToEnd();
                scrollViewer1.Content = textBlock;

    Das ganze habe ich zur Probe in mein App so intigriert:

    private void smallImage_Tap(object sender, Microsoft.Phone.Controls.GestureEventArgs e)
            {
                var resource = Application.GetResourceStream(new Uri(@"/mainpage;component/allewoerter.txt", UriKind.Relative));
                StreamReader streamReader = new StreamReader(resource.Stream);
                TextBlock textBlock = new TextBlock();
                textBlock.TextWrapping = TextWrapping.Wrap;
                textBlock.Text = streamReader.ReadToEnd();
    
                if (autoCompleteBox1.Text == "abc")
                {
                    überschrift.Text = autoCompleteBox1.Text;
                    übersetzung.Text = textBlock.Text;
                    erklaerung.Text = textBlock.Text;
                }
    }

    Jedoch wenn ich das App starte und in die TextBox abc eingebe wird mir dieser Fehler angezeigt.

    In dem Code wird ja in der letzten Zeile dem Steuerelement

    scrollViewer1.Content = textBlock

    der Wert "textBlock" zugewiesen. Jedoch wenn ich das mache wird mir dieses Fehler angezeigt.

    Fehler 1 Eine implizite Konvertierung vom Typ "System.Windows.Controls.TextBlock" in "string" ist nicht

    möglich. C:\Users\Elias\documents\visual studio 2012\Projects\mainpage\mainpage\suche.xaml.cs 93

    36 mainpage


    Wie kann ich diesen Fehler beheben oder hat jemand eine bessere Idee um eine txt datei auszulesen??

    LG Elias

    PS: Wie kann man einem bestimmten TextBlock eine Bestimmte Zeile in der txt Datei geben??


    Grad Umrechner: http://www.windowsphone.com/de-de/store/app/grad-umrechner/59165d3f-6219-4bda-84c5-e55a166f5f3d EselsbrückenBETA: http://www.windowsphone.com/de-de/store/app/eselsbr%C3%BCcken-beta/f9245a85-6953-40c2-9311-0e1bba6934cf


    Freitag, 20. September 2013 16:05

Antworten

  • Weil nach wie vor deine Datei nicht gefunden wird. gib als Uri-Pfad wirklich mal nur folgendes an:

    "allewoerter.txt"

    Dann gehe mal bitte in den Projektmappen-Explorer, markiere die Datei (allewoerter.txt), drücke F4 und stelle (wenn es nicht schon so steht) Buildvorgang auf Inhalt.

    Weiterhin ist es sinnlos einen TextBlock anzulegen, wenn du nur einen String brauchst bzw. ReadToEnd() jedes mal auf neue auszuführen.

                var resource = Application.GetResourceStream(new Uri(@"woerter/latein.txt", UriKind.Relative));
                using(StreamReader streamReader = new StreamReader(resource.Stream))'Damit der Stream auch wieder geschlossen wird.
    {
    string s = streamReader.ReadToEnd(); if (autoCompleteBox1.Text == "abc") { überschrift.Text = autoCompleteBox1.Text; übersetzung.Text = s; erklaerung.Text = s; }
    }


    <Code-13/>- Koopakiller [kuːpakɪllɐ] (Tom Lambert)
    Webseite | Code Beispiele | Facebook | Twitter | Snippets   C# ↔ VB.NET Konverter
    Markiert bitte beantwortende Posts als Antwort und bewertet Beiträge. Danke.

    Freitag, 20. September 2013 17:49
  • Hallo Elias,

    damit liest Du keine Textdatei aus dem Dateisystem aus, sondern eine Resource, die in deiner Anwendung vorhanden sein muss. Ist sie das nicht (und danach sieht die Fehlermeldung aus) kommt es beim Zugriff natürlich zu einem Fehler.

    Dass Du kein Control einer String Eigenschaft zuweisen kannst, wurde dir doch schon erklärt?

    scrollViewer1.Content = textBlock.Text;

    Zur letzten Frage:

    Splitte den mehrzeiligen String per:

    <StringArrayVariable> = <Variable>.Split( new Char[] { Environment.NewLine } )
    

    und übergib den gewünschte Inhalt per:

    TextBlock1.Text = Lines[ 2 ];
    

    2 ist hierbei der nullbasierte Index des Array, in dem Fall also die dritte Zeile. Man sollte natürlich nur einen existierenden Index angeben, sonst kommt klarerweise ein Fehler.

    [String.Split-Methode]
    http://msdn.microsoft.com/de-de/library/b873y76a.aspx


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community

    • Als Antwort markiert ADL Solutions Freitag, 20. September 2013 21:31
    Freitag, 20. September 2013 16:34
    Moderator
  • textBlockName.Text = streamReader.ReadToEnd();
    Wie du es oben stehen hast.


    <Code-13/>- Koopakiller [kuːpakɪllɐ] (Tom Lambert)
    Webseite | Code Beispiele | Facebook | Twitter | Snippets   C# ↔ VB.NET Konverter
    Markiert bitte beantwortende Posts als Antwort und bewertet Beiträge. Danke.

    • Als Antwort markiert ADL Solutions Freitag, 20. September 2013 21:31
    Freitag, 20. September 2013 17:30

Alle Antworten

  • Hallo Elias,

    damit liest Du keine Textdatei aus dem Dateisystem aus, sondern eine Resource, die in deiner Anwendung vorhanden sein muss. Ist sie das nicht (und danach sieht die Fehlermeldung aus) kommt es beim Zugriff natürlich zu einem Fehler.

    Dass Du kein Control einer String Eigenschaft zuweisen kannst, wurde dir doch schon erklärt?

    scrollViewer1.Content = textBlock.Text;

    Zur letzten Frage:

    Splitte den mehrzeiligen String per:

    <StringArrayVariable> = <Variable>.Split( new Char[] { Environment.NewLine } )
    

    und übergib den gewünschte Inhalt per:

    TextBlock1.Text = Lines[ 2 ];
    

    2 ist hierbei der nullbasierte Index des Array, in dem Fall also die dritte Zeile. Man sollte natürlich nur einen existierenden Index angeben, sonst kommt klarerweise ein Fehler.

    [String.Split-Methode]
    http://msdn.microsoft.com/de-de/library/b873y76a.aspx


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community

    • Als Antwort markiert ADL Solutions Freitag, 20. September 2013 21:31
    Freitag, 20. September 2013 16:34
    Moderator
  • Danke für die schnelle antwort.

    Wie kann ich den meine Textdatei zur Resource hinzufügen ??


    Grad Umrechner: http://www.windowsphone.com/de-de/store/app/grad-umrechner/59165d3f-6219-4bda-84c5-e55a166f5f3d EselsbrückenBETA: http://www.windowsphone.com/de-de/store/app/eselsbr%C3%BCcken-beta/f9245a85-6953-40c2-9311-0e1bba6934cf

    Freitag, 20. September 2013 16:38
  • Hallo,

    der von dir gefundene Code ist in der Lage eine Datei aus den Resourcen zu lesen. Du musst natürlich auch das richtige Uri dafür erstellen. In meinem Test lag die txt bei der xaml. Somit braucht ich nur "test.txt" angeben.

    Wenn du eine Datei schreiben und lesen willst, dann darf diese nicht mit in den Resourcen der App liegen. Denn diese sind unveränderbar. Dazu gibt es hier ein Beispiel, welches du dir mal ansehen kannst.

    Zum Runtime-Fehler,
    Dein Uri scheint nicht auf eine exisitente Datei zu verweisen. Wenn die Datei im Root-Verzeichnis liegt, wie die lesende Datei, dann sollte die Angabe des Dateinamens reichen. Wenn die Datei in einem Unterordner liegt, dann muss die Angabe wie folgt aussehen:

    new Uri(@"NewFolder2/allewoerter.txt", UriKind.Relative)

    Absolute Pfade werden anscheinend garnicht unterstützt.

    Zu dem Compilerfehler,
    Solange wie scrollViewer1 auch wirklich ein Scrollviewer ist, so sollte es keinerlei Probleme geben.

    Zum PS,
    der StreamReader hat diverse "Read"-Methoden. ReadToEnd ließt Beispielsweise alles ein. ReadLine dagegen nur eine Zeile. Ein weitere Aufruf wird die nächste Zeile lesen usw. Nun musst du nur über die Standart-String-Operationen deine eine Zeile heraus filtern.

    Zu den Resourcen hinzufügen, kannst du eine Datei indem du einen Rechtsklick auf das Projekt im Projektmappen Explorer machst und Hinzufügen > Neues/Vorhandenes Element wählst.


    <Code-13/>- Koopakiller [kuːpakɪllɐ] (Tom Lambert)
    Webseite | Code Beispiele | Facebook | Twitter | Snippets   C# ↔ VB.NET Konverter
    Markiert bitte beantwortende Posts als Antwort und bewertet Beiträge. Danke.

    Freitag, 20. September 2013 17:09
  • Hallo,

    Wenn ich aber die txt datei in einem TextBlock zeigen möchte. Was muss ich da schreiben.


    Grad Umrechner: http://www.windowsphone.com/de-de/store/app/grad-umrechner/59165d3f-6219-4bda-84c5-e55a166f5f3d EselsbrückenBETA: http://www.windowsphone.com/de-de/store/app/eselsbr%C3%BCcken-beta/f9245a85-6953-40c2-9311-0e1bba6934cf

    Freitag, 20. September 2013 17:20
  • textBlockName.Text = streamReader.ReadToEnd();
    Wie du es oben stehen hast.


    <Code-13/>- Koopakiller [kuːpakɪllɐ] (Tom Lambert)
    Webseite | Code Beispiele | Facebook | Twitter | Snippets   C# ↔ VB.NET Konverter
    Markiert bitte beantwortende Posts als Antwort und bewertet Beiträge. Danke.

    • Als Antwort markiert ADL Solutions Freitag, 20. September 2013 21:31
    Freitag, 20. September 2013 17:30
  • Hallo,

    private void smallImage_Tap(object sender, Microsoft.Phone.Controls.GestureEventArgs e)
            {
                new Uri(@"woerter/latein.txt", UriKind.Relative);
                var resource = Application.GetResourceStream(new Uri(@"/mainpage;component/woerter/latein.txt", UriKind.Relative));
                StreamReader streamReader = new StreamReader(resource.Stream);
                TextBlock textBlock = new TextBlock();
                textBlock.TextWrapping = TextWrapping.Wrap;
                textBlock.Text = streamReader.ReadToEnd();
    
                if (autoCompleteBox1.Text == "abc")
                {
                    überschrift.Text = autoCompleteBox1.Text;
                    übersetzung.Text = streamReader.ReadToEnd();
                    erklaerung.Text = streamReader.ReadToEnd();
                }
    }

    Mir wird aber immer noch der selbe Fehler wie oben angezeigt.



    Grad Umrechner: http://www.windowsphone.com/de-de/store/app/grad-umrechner/59165d3f-6219-4bda-84c5-e55a166f5f3d EselsbrückenBETA: http://www.windowsphone.com/de-de/store/app/eselsbr%C3%BCcken-beta/f9245a85-6953-40c2-9311-0e1bba6934cf

    Freitag, 20. September 2013 17:37
  • Weil nach wie vor deine Datei nicht gefunden wird. gib als Uri-Pfad wirklich mal nur folgendes an:

    "allewoerter.txt"

    Dann gehe mal bitte in den Projektmappen-Explorer, markiere die Datei (allewoerter.txt), drücke F4 und stelle (wenn es nicht schon so steht) Buildvorgang auf Inhalt.

    Weiterhin ist es sinnlos einen TextBlock anzulegen, wenn du nur einen String brauchst bzw. ReadToEnd() jedes mal auf neue auszuführen.

                var resource = Application.GetResourceStream(new Uri(@"woerter/latein.txt", UriKind.Relative));
                using(StreamReader streamReader = new StreamReader(resource.Stream))'Damit der Stream auch wieder geschlossen wird.
    {
    string s = streamReader.ReadToEnd(); if (autoCompleteBox1.Text == "abc") { überschrift.Text = autoCompleteBox1.Text; übersetzung.Text = s; erklaerung.Text = s; }
    }


    <Code-13/>- Koopakiller [kuːpakɪllɐ] (Tom Lambert)
    Webseite | Code Beispiele | Facebook | Twitter | Snippets   C# ↔ VB.NET Konverter
    Markiert bitte beantwortende Posts als Antwort und bewertet Beiträge. Danke.

    Freitag, 20. September 2013 17:49
  • Danke jetzt gehts mit dem auslesen.

    Grad Umrechner: http://www.windowsphone.com/de-de/store/app/grad-umrechner/59165d3f-6219-4bda-84c5-e55a166f5f3d EselsbrückenBETA: http://www.windowsphone.com/de-de/store/app/eselsbr%C3%BCcken-beta/f9245a85-6953-40c2-9311-0e1bba6934cf

    Freitag, 20. September 2013 18:05