Txt Datei aus Resource auslesen

  • VB.NET

Es gibt 28 Antworten in diesem Thema. Der letzte Beitrag () ist von BjöNi.

    Txt Datei aus Resource auslesen

    Guten Abend zusammen !

    Ich bin dabei ein kleines Programm zu schreiben, welches mir meinen Alltag erleichtern soll.
    Ich stecke nun bei dem Problem fest, dass ich eine .txt Datei in meine Resource eingebunden habe,
    diese von dort aber auslesen mag.
    Soweit mein Code:

    VB.NET-Quellcode

    1. ListBox1.Items.AddRange(IO.File.ReadAllLines(My.Resources.GerCrNormal))

    Bzw. der Auschnitt. Bekomme dort aber immer den Error:

    Quellcode

    1. Illegales Zeichen im Pfad


    Und dann habe ich noch eine Frage.
    Ich frage in jeder Form ab, welche Sprache das dokument besitzt & ändere
    somit dann immer die Labels um zwischen deutsch & englisch hin und her zu springen.
    Geladen wird über eine .ini Datei, die IniLib verwendet.
    Kann man das irgendwie verkürzen?
    Jedes mal ALLES abzufragen ist Zeilenaufwendig.

    Gruß eFx
    Eine eingebundene txt-Datei kannst du doch als String behandeln, warum also so umständlich?

    VB.NET-Quellcode

    1. Dim bla As String = My.Resources.test
    Wenn ich das so erstelle, dann sieht es zwar folgendermaßen aus:

    VB.NET-Quellcode

    1. Dim GerBlocks As String = My.Resources.GerBlocks
    2. ListBox1.Items.AddRange(IO.File.ReadAllLines(GerBlocks))


    Dennoch liest er dann die Objekte nicht aus.
    Was willst du denn mit IO.File.ReadAllLines?
    so gehts doch viel einfacher:

    VB.NET-Quellcode

    1. ListBox1.Items.AddRange(My.Resources.GerBlocks)

    Quellcode

    1. Fehler 1 Fehler bei der Überladungsauflösung, da keine zugreifbare "AddRange" mit diesen Argumenten aufgerufen werden kann:
    2. "Public Sub AddRange(items() As Object)": Der Wert vom Typ "String" kann nicht in "1-dimensionales Array von Object" konvertiert werden.
    3. "Public Sub AddRange(value As System.Windows.Forms.ListBox.ObjectCollection)": Der Wert vom Typ "String" kann nicht in "System.Windows.Forms.ListBox.ObjectCollection" konvertiert werden.
    Deine Resource ist ein String, .AddRange erwartet aber einen Array, den er hinzufügen möchte. Also müsstest du diesen String aus den Resourcen erst bei einer neuen Zeile splitten (String.Split).
    „Was daraus gefolgert werden kann ist, dass jeder intelligentere User sein Geld lieber für Bier ausgibt, um einen schönen Rausch zu haben, und nicht dieses Ranzprodukt.“

    -Auszug aus einer Unterhaltung über das iPhone und dessen Vermarktung.

    eFx schrieb:

    VB.NET-Quellcode

    1. Dim GerBlocks As String = My.Resources.GerBlocks
    2. ListBox1.Items.AddRange(IO.File.ReadAllLines(GerBlocks))

    Was steht denn nun in der Ressource drin?
    • Der Dateiname? Dann musst Du noch den aktuellen Pfad davorhängen, bevor Du die Datei auslesen kannst.
    • Der Text selbst? Dann musst Du ihn an den Zeilenenden splitten.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Selbst bei diesem Code:

    VB.NET-Quellcode

    1. Dim GerBlocks As String = My.Resources.GerBlocks
    2. Dim GerBlocksArray As String = Split(GerBlocks)


    Klappt es wieder nicht.

    Quellcode

    1. Fehler: Der Wert vom Typ "1-dimensionales Array von String" kann nicht in "String" konvertiert werden.
    Ich versteh nicht ganz, ist Gerblocks auch als Pfad deklariert??

    Edit:

    Nein anders formuliert:

    Gerblocks muss ein Pfad sein auf den du zugreifen möchtest.
    Wenn du das einfach so stehen lässt als My.Ressources.blablabla geht nichts.
    Gib den Pfad spezifisch an!

    VB.NET-Quellcode

    1. Dim Gerblocks as String
    2. Gerblocks = "Der Pfad in dem sich die Datei befindet, die du verwenden möchtest"


    Dann musst du die Datei noch öffnen und auslesen
    Im Anschluss kannst du dann das gelesene Splitten und verarbeiten.

    Grüßle Marco
    Du kannst auch beim Ausführen des Programms die Textdatei auswählen, die ausgelesen werden soll.
    Du kannst dir ja nicht immer sicher gehen, dass die Textdatei existiert oder mitgeliefert wird.

    Und ob Ressource hin oder her. Du kannst Gerblocks ja dennoch auslesen.
    Sorry ich blicks immer weniger was du machen willst. Deine Ressource ist und bleibt Gerblocks!
    Ich glaub du hast die Funktion von "Split" noch nicht verstanden. Wenn du willst, dass eine sich in den Ressourcen befindende Textdatei Gerbolcks.txt zeilenweise in eine List(Of String) kommen soll, müsste es so gehen:

    VB.NET-Quellcode

    1. Dim bla As List(Of String) = My.Resources.Gerblocks.Split(CChar(vbNewLine))
    UNGETESTET, soll kein C&P weden!
    ich binde immer TextDateien in mein Projekt ein (menü - projekt - hinzufügen - vorhandene Datei). So bleiben sie TextDateien, und ich kann sogar inne IDE da reingugge.
    per Kontextmenü kannste auch die Eigenschaft dieser Datei einstellen, etwa "Ins Ausgabeverzeichnis kopienen: Immer".

    Dann wird die Datei immer ins Ausgabeverzeichnis kopiert, und per Code kannste Application.StartupPath & Dateiname drauf zugreifen.
    So eingebundene Dateien werden auch mitgenommen, wenn man das Projekt verteilt.

    Oder du schreibst im Form-Designer deine Werte direkt in die Items der Listbox. Dann sind die ja auch drin - da kümmert der FormDesigner sich drum.

    ErfinderDesRades schrieb:

    und per Code kannste Application.StartupPath & Dateiname drauf zugreifen

    Ich glaube genau das will @eFx: ja gerade nicht! Er will, dass die Datei in die exe einkompiliert wird.

    Ich hab jetzt glaub ich schon mindestens 2 oder 3 Mal gepostet, dass man eine sich in den Resourcen befindende Textdatei einfach als String behandeln kann.

    Dass er nicht mit Split umgehen kann, ist ne andere Baustelle, aber auch dadrauf bin ich schonmal in Post #17 #16 eingegangen.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „BjöNi“ () aus folgendem Grund: Falsche Postnummer :)

    ja, glaub du hast recht. Aber wieso willerdas nicht?

    Und genau genommen ist "Datei in resource einbinden" ja auch quatsch. Denn eine Datei ist eine Datei, und wenn ihr Inhalt in einer Resource ist, dann ists keine Datei mehr, sondern Teil der Resource (also Teil einer anneren Datei).
    Einfach nochmal zusammen gefasst:

    Ich bin ein totler Anfänger in vb.net, deshalb dachte ich das es am besten ist, meine .txt Datei in die Resources mit reinzupacken
    um sie von dort aus zu laden, damit man diese nicht extra anlegen muss.

    Die .txt MUSS auf alle Fälle geladen werden, da das Programm durch eine .ini zweisprachig wird und wenn Sprache = A ist,
    dann ließt er den TxtA aus, falls Sprache B, dann liest er TxtB aus. (z.B.)

    Ich habe bisher nur diese Methode versucht zu erarbeiten, nach anderen Alternativen habe ich noch nicht
    gesehen. Ist es nun besser aus der Resource die .txt datei rauszukopieren mittels VB & auf die rauskopierte
    Datei zuzugreifen, oder wie bisher aus der Resource die .txt zu laden.

    ErfinderDesRades schrieb:

    ich binde immer TextDateien in mein Projekt ein (menü - projekt - hinzufügen - vorhandene Datei). So bleiben sie TextDateien, und ich kann sogar inne IDE da reingugge.
    per Kontextmenü kannste auch die Eigenschaft dieser Datei einstellen, etwa "Ins Ausgabeverzeichnis kopienen: Immer".


    So mache ich es bisher ja auch. Außer das mit dem Ins Aufgabeverzeichnis kopieren.