Xamarin表单从文本文件读取结果是空的

我的项目文件资源管理器中有data.txt文件。 我想从这个文本文件中读取数据,但每次尝试时,结果都为null,程序崩溃。 我写的代码是:

public MapPage() { var assembly = typeof(MapPage).GetTypeInfo().Assembly; Stream stream = assembly.GetManifestResourceStream("Mapper.data.txt"); string text = ""; using (var reader = new System.IO.StreamReader(stream)) { text = reader.ReadToEnd(); } } 

使用此代码块,流始终为空。 这是项目文件资源管理器:

项目文件资源管理器

我从其属性中选择文本文件作为嵌入式资源。

嵌入式资源

正如下面引用的文档所指出的,您拥有的代码是PCL / .NET标准项目。 如果您使用的是共享项目类型,则必须通过前缀(即Mapper.IOS,Mapper.Droid等)来定位设备类型。

我已经测试了两个场景,并且它们使用您在问题中使用的相同代码,但在共享项目类型中使用IOS,Droid等的前缀。

 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(); } } 

参考Xamarin.Forms:在共享项目中加载作为资源嵌入的文件

我终于找到了解决方案。 它不是解决问题的好方法,但它有效。 我的问题是给文本文件的路径不起作用。 该程序无法读取文本文件。 但是使用这段代码,程序本身会找到文本文件的路径并使用它。

 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]) }); } } } } }