通过类将文件读取到列表中是不起作用的

本文关键字:列表 不起作用 读取 文件 | 更新日期: 2023-09-27 18:21:35

我在c#中用xamarin编写了一个android应用程序,并创建了一个应用程序类来管理带有我想加载到列表中的数据的文件。

应用程序类:

namespace soroksar_sc_stat
{
[Application]
public class GetDataClass : Android.App.Application
{
    public GetDataClass (){}
    private string filename = Path.Combine(System.Environment.GetFolderPath(System.Environment.SpecialFolder.ApplicationData),"playerdata.txt");
    private DirectoryInfo di = Directory.CreateDirectory(System.Environment.GetFolderPath(System.Environment.SpecialFolder.ApplicationData));
    private FileStream myFile = new FileStream(Path.Combine(System.Environment.GetFolderPath(System.Environment.SpecialFolder.ApplicationData),"playerdata.txt"), FileMode.Create);
    public List<string> GetList()
    {
        StreamReader myReader = new StreamReader(this.myFile);
        string line;
        List<string> list = new List<string>();
        while((line = myReader.ReadLine()) != null)
        {
            list.Add(line);
        }
        myReader.Close ();
        list.Add ("Blabla");
        return list;
    }
    public void SetNewData (string playerName, DateTime bornDate)
    {
        string newLine = playerName + " " + bornDate.ToString () + " 0 0 0 0";
        StreamWriter myWriter = new StreamWriter(this.myFile);
        myWriter.WriteLine(newLine);
        myWriter.Close();
    }


}
}

应显示列表的活动

namespace soroksar_sc_stat
{
[Activity (Label = "DataActivity")]         
public class DataActivity : Activity
{
    protected override void OnCreate (Bundle bundle)
    {
        base.OnCreate (bundle);
        SetContentView (Resource.Layout.DataLayout);
        Button addbutton = FindViewById<Button> (Resource.Id.dataButton);
        ListView lista = FindViewById<ListView> (Resource.Id.listView1);
        GetDataClass dataList = new GetDataClass();

        List<string> list = dataList.GetList();
        addbutton.Click += delegate 
        {
            Intent intent = new Intent(this, typeof(AddDataActivity));
            this.StartActivity(intent);
        };
        }
    }
}

第一节课是阅读课。现在它是一个空文件,但为了进行故障排除,我在阅读结束时添加了一个字符串。但是,如果我在第二个活动中启动模拟器(哪一个代码是第二个),则列表中没有任何项目。我真的不知道问题出在哪里,如果有人能帮我,我真的很感激。

通过类将文件读取到列表中是不起作用的

正如我之前在评论中提到的,我认为因为您没有正确关闭streamreader,它可能在写入文件之前就已经关闭了。解决方案是以下之一

public void SetNewData (string playerName, DateTime bornDate)
{
    string newLine = playerName + " " + bornDate.ToString () + " 0 0 0 0";
    using(StreamWriter myWriter = new StreamWriter(this.myFile))
        myWriter.WriteLine(newLine);
}
public void SetNewData (string playerName, DateTime bornDate)
{
    string newLine = playerName + " " + bornDate.ToString () + " 0 0 0 0";
    StreamWriter myWriter = new StreamWriter(this.myFile);
    myWriter.WriteLine(newLine);
    myWriter.Flush();
    myWriter.Close();
}

请注意:第一种方式是我喜欢的方式,因为它可以确保所有清理都正确完成。此外,你应该使用一个使用块来读取太

using(StreamReader myReader = new StreamReader(this.myFile))
{
    string line;
    List<string> list = new List<string>();
    while((line = myReader.ReadLine()) != null)
    {
        list.Add(line);
    }
}