繁体   English   中英

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

[英]Xamarin Forms Read From Text File Result is Null

我的项目文件资源管理器中有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])
                    });
                }
            }
        }
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM