2016-01-04 13 views
5

Ich versuche, eine Textdatei thedata.txt zu lesen, die eine Liste von Wörtern hat, die ich in einem Hangman-Spiel verwenden möchte. Ich habe verschiedene Möglichkeiten ausprobiert, aber ich kann nicht herausfinden, wo die Datei platziert wird, wenn überhaupt, wenn die App läuft. Ich habe die Datei zu meinem Projekt hinzugefügt, und ich habe versucht, die Build-Eigenschaften auf Inhalt und dann eingebettete Ressource zu setzen, kann aber die Datei nicht finden. Ich habe ein universelles Windows 10-App-Projekt erstellt. Der Code, den ich versuchte, sieht so aus:Wie lese ich eine Textdatei in Windows Universal App

Stream stream = this.GetType().GetTypeInfo().Assembly.GetManifestResourceStream("thedata.txt"); 
      using (StreamReader inputStream = new StreamReader(stream)) 
      { 
       while (inputStream.Peek() >= 0) 
       { 
        Debug.WriteLine("the line is ", inputStream.ReadLine()); 
       } 
      } 

Ich bekomme Ausnahmen. Ich habe auch versucht, die Dateien in einem anderen Verzeichnis aufzulisten: schwer vermeiden Codierung die Liste der Namen in meinem Programm

string path = Windows.Storage.ApplicationData.Current.LocalFolder.Path; 
      Debug.WriteLine("The path is " + path); 
      IReadOnlyCollection<StorageFile> files = await Windows.Storage.ApplicationData.Current.LocalFolder.GetFilesAsync(); 
      foreach (StorageFile file2 in files) 
      { 
       Debug.WriteLine("Name 2 is " + file2.Name + ", " + file2.DateCreated); 
      } 

Ich sehe nicht, die Datei dort entweder ... ich will. Ich bin mir nicht sicher, über welchen Pfad die Datei verfügt.

Antwort

17

der Code sehr einfach, müssen Sie nur ein gültiges URI-Schema verwenden (ms-appx in Ihrem Fall) und Ihre WinRT Input als klassischer .NET-Stream umwandeln:

var file = await StorageFile.GetFileFromApplicationUriAsync(new Uri("ms-appx:///thedata.txt")); 
using (var inputStream = await file.OpenReadAsync()) 
using (var classicStream = inputStream.AsStreamForRead()) 
using (var streamReader = new StreamReader(classicStream)) 
{ 
    while (streamReader.Peek() >= 0) 
    { 
     Debug.WriteLine(string.Format("the line is {0}", streamReader.ReadLine())); 
    } 
} 

Für die Eigenschaften der eingebetteten Datei, „Build Aktion "muss auf" eingestellt sein Inhalt "und" In Ausgabeverzeichnis kopieren "sollte auf" Nicht kopieren "gesetzt sein.

+0

Der obige Code von t.ouvre beantwortet meine Frage. Ich habe überprüft, dass es auf meinem Computer und meinem Emulator funktioniert. Danke für das Beantworten meiner Frage. –

+0

Funktioniert wie ein Charme. Vielen Dank – lightstalker89

4

Sie nicht klassische .NET IO Methoden in Windows-Runtime-Anwendungen verwenden können, der richtige Weg, um eine Textdatei in UWP zu lesen ist:

var file = await ApplicationData.Current.LocalFolder.GetFileAsync("data.txt"); 
var lines = await FileIO.ReadLinesAsync(file); 

Auch Sie keinen physischen Pfad eines Bedürfnis Ordner - von msdn:

Sie sich nicht auf diese Eigenschaft verlassen, um einen Ordner zuzugreifen, weil ein Dateisystem Pfad für einige Ordner nicht verfügbar ist. In den folgenden Fällen beispielsweise hat der Ordner möglicherweise keinen Dateisystempfad, oder der Pfad des Dateisystems ist möglicherweise nicht verfügbar. • Der Ordner stellt einen Container für eine Dateigruppe dar (z. B. den Rückgabewert von einigen Überladungen von der GetFoldersAsync-Methode) anstelle eines tatsächlichen Ordners in der Datei . • Der Ordner wird von einem URI unterstützt. • Der Ordner wurde von mithilfe einer Dateiauswahl ausgewählt.

3

Weitere Informationen finden Sie unter File access permissions. Und Create, write, and read a file bietet mit Datei-IO für UWP-Anwendungen auf Windows 10.

verwandte Beispiele

Sie können mithilfe einer App URI, wie diese eine Datei direkt aus der App lokalen Ordner abrufen:

using Windows.Storage; 

StorageFile file = await StorageFile.GetFileFromApplicationUriAsync("ms-appdata:///local/file.txt"); 
+0

Während dieser Link die Frage beantworten kann, ist es besser, die wesentlichen Teile der Antwort hier aufzunehmen und den Link als Referenz bereitzustellen. Nur-Link-Antworten können ungültig werden, wenn sich die verknüpfte Seite ändert. - [Aus Bewertung] (/ review/low-quality-posts/10763931) –

+0

Danke! Die Code-Snippets wurden aktualisiert. –

Verwandte Themen