2017-12-31 136 views
1

Ich habe data.txt-Datei in meinem Projektdatei-Explorer. Ich möchte Daten aus dieser Textdatei lesen, aber jedes Mal, wenn ich es versuche, kommt das Ergebnis null und das Programm stürzt ab. Der Code, den ich schrieb, ist:Xamarin Forms Lesen aus Textdatei Ergebnis ist Null

Mit diesem Codeblock kommt der Stream immer Null. Hier ist das Projekt Datei-Explorer:

Project file explorer

ich wählen Sie die Textdatei als Eingebettete Ressource von seinen Eigenschaften.

Embedded Resource

+0

Gefunden dies in der Dokumentation speziell über eingebettete Ressourcen in gemeinsamen Projekten https://developer.xamarin.com/guides/xamarin-forms/application-fundamentals/files/#Embedding_in_Shared_Projects – Nkosi

Antwort

0

Ich habe endlich die Lösung gefunden. Es ist kein guter Weg, es zu lösen, aber es funktioniert. Mein Problem war, dass der Pfad der Textdatei nicht funktionierte. Das Programm konnte die Textdatei nicht lesen. Aber mit diesem Code findet das Programm selbst den Pfad der Textdatei und benutzt sie.

private void LoadData() 
{ 
    var assembly = typeof(MapPage).GetTypeInfo().Assembly; 
    foreach (var res in assembly.GetManifestResourceNames()) 
    { 
     if(res.Contains("data.txt")) 
     { 
      Stream stream = assembly.GetManifestResourceStream(res); 

      using (var reader = new StreamReader(stream)) 
      { 
       string data = ""; 
       while((data = reader.ReadLine()) != null) 
       {   
        var array = data.Split(' '); 
        dataArray.Add(new SensorModel() 
        { 
         left = Convert.ToInt32(array[0]), 
         right = Convert.ToInt32(array[1]), 
         front = Convert.ToInt32(array[2]) 
        }); 
       } 
      } 
     } 
    } 
} 
3

Wie über die Dokumentation unten wies darauf hin, verwiesen, der Code, den Sie haben, ist für einen PCL/.NET Standard-Projekt. Wenn Sie einen gemeinsamen Typ Typ verwenden, dann müssen Sie den Gerätetyp über ein Präfix, z. B. Mapper.IOS, Mapper.Droid, usw.

Ich habe beide Szenarien getestet und sie funktionieren mit dem gleichen Code Sie Haben Sie in Ihrer Frage, aber die Präfixe für IOS, Droid, etc. in den freigegebenen Projekttyp.

public MainPage() 
{ 
    #if __IOS__ 
    var resourcePrefix = "Mapper.iOS"; 
    #endif 
    #if __ANDROID__ 
    var resourcePrefix = "Mapper.Droid"; 
    #endif 
    #if WINDOWS_PHONE 
    var resourcePrefix = "Mapper.WinPhone"; 
    #endif 

    var assembly = typeof(MainPage).GetTypeInfo().Assembly; 
    Stream stream = assembly.GetManifestResourceStream($"{resourcePrefix}.data.txt"); 
    string text = ""; 

    using (var reader = new System.IO.StreamReader(stream)) 
    { 
     text = reader.ReadToEnd(); 
    } 
} 

Referenz Xamarin.Forms : Loading Files Embedded as Resources in Shared Projects

+0

Dieser Code ist nicht für mich arbeiten . Der Stream wird immernoch null. – esdoodle