C#-Can';t将列表写入txt文件

C#-Can';t将列表写入txt文件,c#,C#,我在将列表写入txt文件时遇到问题。如果我运行Save方法,它只生成一个空白的txt文件。我从txt文件填写这个列表,它工作正常,所以我确定它不是空的(我可以在日历中看到我的约会)。这是我的方法 编辑 好的,我知道问题在哪里_加载中的约会列表与保存中的_约会列表不同。我不知道为什么。我没有其他的清单。这是一样的,但不是:/ public bool Load() { DateTime start = new DateTime(2000,01,01);

我在将列表写入txt文件时遇到问题。如果我运行Save方法,它只生成一个空白的txt文件。我从txt文件填写这个列表,它工作正常,所以我确定它不是空的(我可以在日历中看到我的约会)。这是我的方法

编辑

好的,我知道问题在哪里_加载中的约会列表与保存中的_约会列表不同。我不知道为什么。我没有其他的清单。这是一样的,但不是:/

    public bool Load()
    {
        DateTime start = new DateTime(2000,01,01);
        CultureInfo enUS = new CultureInfo("en-US");
        int length = 0;
        string screenDiscription = "";
        bool occursOnDate = false;
        string line;
        int i = 1;
        StreamReader sr = new StreamReader("appointments.txt");

        if (!File.Exists("appointments.txt"))
        {
            return false;
        }

        while ((line = sr.ReadLine()) != null)
        {
            if (i % 4 == 1)
            {
                start = DateTime.ParseExact(line, "ddMMyyyy HHmm", enUS);
            }
            if (i % 4 == 2)
            {
                length = int.Parse(line);
            }
            if (i % 4 == 3)
            {
                screenDiscription = line;
            }
            if (i % 4 == 0)
            {
                Appointment appointment = new Appointment(start, length, screenDiscription, occursOnDate);
                _appointments.Add(appointment);
            }
            i++;
        }
        sr.Close();
        return true;
    }

    public bool Save()
    {
        StreamWriter sw = new StreamWriter("appointments.txt");

        if (File.Exists("appointments.txt"))
        {
            foreach(IAppointment item in _appointments)
            {
                    sw.WriteLine(item.Start);
                    sw.WriteLine(item.Length);
                    sw.WriteLine(item.DisplayableDescription);
                    sw.WriteLine(" ");
            }
            sw.Close();
            return true;
        }
        else
        {
            File.Create("appointments.txt");

            foreach (IAppointment item in _appointments)
            {
                    sw.WriteLine(item.Start);
                    sw.WriteLine(item.Length);
                    sw.WriteLine(item.DisplayableDescription);
                    sw.WriteLine(" ");
            }
            sw.Close();
            return true;
        }
    }

我已经重构了你的
Save
方法,但是我无法测试它,因为我没有你的
iappoint
约会

public void Save()
{
    var builder = new StringBuilder()
    foreach (IAppointment item in _appointments)
    {
        builder.AppendLine(item.Start);
        builder.AppendLine(item.Length);
        builder.AppendLine(item.DisplayableDescription);
        builder.AppendLine(" ");
    }

    File.WriteAllText("appointments.txt", builder.ToString());
}
注意:我认为您的
bool
返回类型是多余的,因为该方法总是在所有代码路径上返回
true
;因此,我将其更改为
void
。此外,我正在使用
StringBuilder
来构造文件内容,然后使用内置的
file.writealText
方法来抽象通常打开流、流编写器、关闭等时需要处理的IO操作


我不确定这是否能解决您的问题,因为正如我所说的,我无法测试它,也不确定您的代码到底出了什么问题,但至少它可能更干净、更容易使用。

您是否尝试过创建
TextWriter
而不是
StreamWriter
?使用TextWriter会给您带来更多好处。@BradleyWilson我想
StreamWriter
可以处理字节,否?尝试使用sw.Flush()关闭StreamWriter之前。StreamWriter(string)构造函数的函数表示,如果文件不存在,它将创建该文件;如果无法创建该文件,它将抛出异常。所以,您不需要检查它是否存在或自己创建它。谢谢您的回复。我的保存方法必须是bool,因为我的任务需要它。我调试过了,约会列表有问题。它是空的。我不知道为什么,因为我从文件加载它,我可以在日历中使用它,但当我想将它写入文件时,它是空的。“我的保存方法必须是bool,因为我的助理需要它”,如果它总是返回true,我真的不知道在这里说什么!