none
Nach Datei im Programm suchen RRS feed

  • Frage

  • Hallo, ich Speicher ein Textdokument in mein Programm über Hinzufügen vorhandenes Element.

    Wie muss ich das "Abspeichern" (Buildvorgang): Inhalt oder eingebettet Ressource, und wie rufe ich das Dokument dann auf?

    Danke im voraus

    Samstag, 14. Juni 2014 23:41

Alle Antworten

  • Hi,

    du kannst eine Textdatei als eingebettete Resource in einer Resourcendatei speichern und wieder abrufen:

    1. Über dein Projekt neues Element hinzufügen "Resourcendatei", Name: FileResources.resx.

    2. Doppelklick auf neue Datei FileResources.resx.

    3. Als Resourcentyp Dateien auswählen und eine neue Resource hinzufügen -> auswahl vorhandenes Element

    4. Deine Textdatei auswählen, Name: MeineTextdatei.txt

    5. Im neuen Projektordner Resourcen mit rechter Maustaste auf deine Textdatei klicken

    6. Im Eigenschaftenfenster bei Buildvorgang "Eingebettete Resource" auswählen

    In deinem Code kannst du jetzt bequem auf deine Textdatei wie folgt zugreifen:

    string text = FileResources.MeineTextdatei;
    Console.WriteLine(text);

    Gruß

    JohSu


    • Bearbeitet JohSu Sonntag, 15. Juni 2014 01:43
    Sonntag, 15. Juni 2014 01:42
  • Hallo,
    eine andere Möglichkeit ohne Resourcendatei geht wie folgt:

    1. Füge die Datei zum Projekt hinzu und STelle Buildvorgang auf eingebette Resource.
    2. Lese einen Text beispielsweise wie folgt aus:
      using (var stream = new StreamReader(Assembly.GetExecutingAssembly().GetManifestResourceStream("WpfApplication161.TextFile1.txt")))//Namespace und Name der Datei
      {
          var msg = stream.ReadToEnd();
          MessageBox.Show(msg);
      }
      Um Beispielsweise die Bytes eines Bildes auszulesen kannst du direkt den von GetManifestResourceStream zurück gegebenen Stream verwenden.

    Tom Lambert - C# MVP
    Bitte bewertet- und markiert Beiträge als Antwort. Danke.
    Nützliche Links: .NET Quellcode | C# ↔ VB.NET Konverter
    Ich: Webseite | Code Beispiele | Facebook | Twitter | Snippets

    Sonntag, 15. Juni 2014 12:36
  • Hallo Danke für die Infos,

    ich will eigentlich die Textdatei oder zum Bsp. Worddatei als ganzes anzeigen, also bei betätigen des Buttons geht der Editor mit der Textdatei auf ...

    Ich bilde natürlich voher eine neues Dokument usw, wie man das so macht, aber ich gebe anscheint einen falschen Pfad zur Datei an, und nach dem veröffentlichen liegt die Datei ja im Projekt und nicht unter C: die kann auch unter D: liegen zBsp.

    Danke euch

    Sonntag, 15. Juni 2014 16:39
  • Hallo,
    du kannst keine Datei öffnen, die als Resource im Programm liegt. Diese musst du zuvor entpacken.

    Ich würde jedoch, wenn möglich, das Setup anweisen die Datei mit zu entpacken. Wenn du kein Setup verwendest, musst du die Datei entpacken und dann öffnen:

    var path = System.IO.Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), @"Hersteller\Programm\Documents");//Pfad wo die Datei hin gespeichert werden soll
    if (!Directory.Exists(path))
        Directory.CreateDirectory(path);//Ordner anlegen, falls nicht vorhanden
    path = System.IO.Path.Combine(path, "Dok1.docx");//Dateinamen ergänzen
    if (!File.Exists(path))//Datei existiert nicht, entpacken
    {
        using (var stream = Assembly.GetExecutingAssembly().GetManifestResourceStream("WpfApplication162.Dok1.docx"))//Namespace und Name der Datei
        {
            using (var writer = File.OpenWrite(path))
            {
                while (stream.Position < stream.Length)
                    writer.WriteByte((byte)stream.ReadByte());//Byte für Byte schreiben
            }
        }
    }
    Process.Start(path);//Datei öffnen


    Tom Lambert - C# MVP
    Bitte bewertet- und markiert Beiträge als Antwort. Danke.
    Nützliche Links: .NET Quellcode | C# ↔ VB.NET Konverter
    Ich: Webseite | Code Beispiele | Facebook | Twitter | Snippets

    Sonntag, 15. Juni 2014 16:54
  • Danke, jetzt wird ein Ordner unter User/AppData erzeugt, was muss ich machen das die Worddatei beim Programm liegt, also wo die exe installiert wird?

    Grüße

    Montag, 16. Juni 2014 14:11
  • Hallo,
    ich habe es nicht ohne Grund in AppData abgelegt. Das Problem ist, das das Anwendungsverzeichnis i.d.R. schreibgeschützt ist. Darum laufen Setups auch unter Adminrechten.
    Wenn die Datei in AppData abgelegt wird, hast du damit keine Probleme.

    Wenn du trotzdem das Verzeichnis des Programms nutzen willst:

    var path = new FileInfo(Assembly.GetExecutingAssembly().Location).DirectoryName


    Tom Lambert - C# MVP
    Bitte bewertet- und markiert Beiträge als Antwort. Danke.
    Nützliche Links: .NET Quellcode | C# ↔ VB.NET Konverter
    Ich: Webseite | Code Beispiele | Facebook | Twitter | Snippets

    Montag, 16. Juni 2014 14:27
  • ;D da hast du recht. Jetzt erzeugt er mir aber eine neue Datei und greift nicht auf meine Vorlage zu.. Viel mir jetzt erst auf da meine Bookmarks weg sind...

    Grüße

    Montag, 16. Juni 2014 14:52
  • Mein Code entpackt nur eine Datei aus den Resourcen. Was du für eine Datei in den Resourcen hast, kann ich nicht wissen.
    Wenn du eigentlich eine Word-Vorlage in den Resourcen haben willst, muss es eine dotx bzw. dot-Datei sein.

    Tom Lambert - C# MVP
    Bitte bewertet- und markiert Beiträge als Antwort. Danke.
    Nützliche Links: .NET Quellcode | C# ↔ VB.NET Konverter
    Ich: Webseite | Code Beispiele | Facebook | Twitter | Snippets

    Montag, 16. Juni 2014 15:02