【问题标题】:The function isn't repeating in the way i want it to该功能没有按照我想要的方式重复
【发布时间】:2020-10-25 20:24:27
【问题描述】:

所以我尝试将字符串添加到哈希表中,然后将其写入文本文件,但它只打印一行,而不是其他五行。

当我尝试在控制台上编写它时,它工作得非常好。

我对使用文件很陌生,所以我不确定这个问题`public static int number = 1;

    static void using_integers_also_arrays(string val)
    {
        user3 = new Hashtable();
        using (StreamWriter Path = new StreamWriter("file"))
        {
            while (number < 5)
            {
                number += 1;
                user3.Add(number, val);
                Path.WriteLine($"Username: {user3[number]}");
                Path.WriteLine(number);
                Console.WriteLine($"Username: {user3[number]}");
                
                using_integers_also_arrays(Console.ReadLine());
            }
            if (number >= 5)
            {
                Path.WriteLine("finished");
            }
        }

    }
    static Hashtable user3;
    static void Main(string[] args)
    {
        
        

            using_integers_also_arrays(Console.ReadLine());
 

    }`

【问题讨论】:

  • 有什么例外吗?
  • 那么,当您尝试执行该代码时会发生什么?
  • 它只显示第一行,但在控制台上它按我想要的方式工作

标签: c# file directory


【解决方案1】:

问题是,当您甚至还没有关闭文件时,您正在尝试向用户询问新的输入。 因此,您必须将此行移到 using 代码块之外。

using_integers_also_arrays(Console.ReadLine());

像这样:

using (StreamWriter Path = new StreamWriter("file", true))
        {
            while (number < 5)
            {
                number += 1;
                user3.Add(number, val);
                Path.WriteLine($"Username: {user3[number]}");
                Path.WriteLine(number);
                Console.WriteLine($"Username: {user3[number]}");
            }
            if (number >= 5)
            {
                Path.WriteLine("finished");
            }
        }
                
                using_integers_also_arrays(Console.ReadLine());

编辑:正如@Johnny Andrew 在另一个答案中指出的那样,您还必须使用真正的参数重载以避免每次都重写内容。 这样,您可以从用户输入中获得 5 行,还允许您将更多内容附加到文件中。

【讨论】:

    【解决方案2】:

    我认为通过调用 new StreamWriter("file"),您每次都会覆盖其内容,这就是您最终在该文件中得到 1 行的原因。

    在这种情况下,您必须在创建流编写器时传递第二个参数才能追加。看看微软文档:https://docs.microsoft.com/en-us/dotnet/api/system.io.streamwriter.-ctor?view=netcore-3.1#System_IO_StreamWriter__ctor_System_String_System_Boolean_

    试试这个:

    ...
    using (StreamWriter Path = new StreamWriter("file", true))
    ...
    

    【讨论】:

    • 我尝试了代码,它甚至没有写入文件,因为它只在你关闭它时写入,而他没有这样做。他试图在 using 块中请求新的用户输入。所以文件不会被关闭或写入。还有文件正在使用异常...
    • 你是对的,必须先关闭流写入器,然后再打开另一个。但是为了在接下来的文件中追加 using_integers_also_arrays(Console.ReadLine()); StreamWriter 必须使用 true 参数打开,否则文件仍然会以仅写入 1 行结束
    猜你喜欢
    • 1970-01-01
    • 2012-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多