C#对象引用和文件已在使用中

时间:2017-07-21 16:34:29

标签: c#

我正在尝试创建一个简单的控制台程序来读取和写入我在互联网上找到的文本文件。 但有几个对象引用错误阻碍了我,我似乎无法找到解决方案或满足我的问题的答案。 另一个进程已经存在于我们文本文件中的错误。 它们位于代码中的// ---------------之间。 请建议

namespace SavingNames
{
class Program
{
    public static void Main(string[] args)
    {
        Naam[] personen = new Naam[1];
        int C;

        do
        {
            //menu
            Console.WriteLine("1. Load data.");
            Console.WriteLine("2. Display persons.");
            Console.WriteLine("3. Add new Person.");
            Console.WriteLine("4. Exit.");
            Console.WriteLine("Make a choice 1-4: ");
            C = Convert.ToInt32(Console.ReadLine());

            switch (C)
            {
                case 1:
                    GetData(ref personen);

                    break;
                case 2:
                    ShowAll(personen);
                    break;
                case 3:
                    AddPerson(ref personen);
                    break;
                case 4:
                    break;
            }
        } while (C != 4);

    }


    public static void GetData(ref Naam[] personen)
    {
        StreamReader reader = new StreamReader("Names.txt");
        int size = 0;

        using (reader = File.OpenText("Names.txt"))
        {
            while (reader.ReadLine() != null)
            {
                size++;
            }
        }

        personen = new Naam[size];
        reader = File.OpenText("Names.txt");

        for (int i = 1; i < personen.Length; i++)
        {
            personen[i] = new Naam();
            personen[i].Name = reader.ReadLine();
            personen[i].Livingplace = reader.ReadLine();
            personen[i].Profession = reader.ReadLine();
        }

        reader.Close();

        Console.WriteLine("Data loaded. Press any key to continue...");
        Console.ReadKey();
        Console.Clear();
    }

    public static void ShowAll(Naam[] personen)
    {
        Console.Clear();

        for (int i = 0; i < personen.Length; i++)
        {
           //---------------------------------------------------
           personen[i].Display();//error object-reference-not-set-to-an-instance-error happens here when
                                 //I try to display all entries.
           //---------------------------------------------------
        }

        Console.WriteLine("Press any key to continue...");
        Console.ReadKey();

    }

    public static void AddPerson(ref Naam[] personen)
    {
        //----------------------------------------------------------
        StreamWriter writer = new StreamWriter("Names.txt", true);//here I get an error saying that the file is already opened
        //writer = File.AppendText("Names.txt");                  //by another process (probably the getdata function)
//--------------------------------                                               //and I don't know how to get past this

        //writer.WriteLine(personen.Length + 1);

        Naam temp = new Naam();

        //input gegevens nieuwe persoon
        Console.WriteLine("Name: ");
        temp.Name = Console.ReadLine();

        Console.WriteLine("Hometown: ");
        temp.Livingplace = Console.ReadLine();

        Console.WriteLine("Profession: ");
        temp.Profession = Console.ReadLine();

        //schrijf nieuwe gegevens naar tekst file.
        writer.WriteLine(temp.Name);
        writer.WriteLine(temp.Livingplace);
        writer.WriteLine(temp.Profession);

        //geef de vorige gegevens in.
        for (int i = 0; i < personen.Length; i++)
        {
            //-----------------------------------------
            writer.WriteLine(personen[i].Name);         //error object-reference-not-set-to-an-instance-error happens here when
                                                        //I try to add a new person even 
            writer.WriteLine(personen[i].Livingplace);
            writer.WriteLine(personen[i].Profession);
            //-----------------------------------------
        }

        writer.Close();

        //update array.
        GetData(ref personen);
    }
}

}

0 个答案:

没有答案