【问题标题】:Writing to file using values from an object in C#使用 C# 中对象的值写入文件
【发布时间】:2013-03-11 14:53:45
【问题描述】:

我使用此代码的目标是使用 foreach 循环遍历每个对象并将当前字符串值写入 txt 文件。

我使用“Woof”和“Bull”作为测试。 Bull 是我的 AverageValues 类中的字符串变量。

不幸的是,它目前不会将 Bull 的值写入文件,但是,它会创建文件。

我认为这很容易解决,但我现在似乎找不到它。

所有帮助将不胜感激!

    public void doStuff()
    {
        AverageValues AVS = new AverageValues();
        AVS.Bull = "Woof";
        string path = "C:\\users\\kjenks11\\Averages.txt";
        FileStream NewFile = File.Create(path);
        StreamWriter writeIt = new StreamWriter(NewFile);
        List<AverageValues> AV = new List<AverageValues>();
        AV.Add(AVS);

        foreach (var value in AV)
        {
                writeIt.Write(value.Bull);
        } 
        NewFile.Close();
     }

【问题讨论】:

    标签: c# asp.net web-applications asp.net-mvc-4


    【解决方案1】:

    Flush 或在关闭文件本身之前关闭流:

    foreach (var value in AV)
    {
         writeIt.WriteLine(value.Bull);
    }
    writeIt.Flush();
    writeIt.Close();
    

    注意样式 - 创建Stream(任何类型),或者更确切地说,实现IDisposable 的任何对象时,使用using statement 创建它:

    using(var writeIt = new StreamWriter(NewFile))
    {
      // use writeIt here - it will dispose properly
    }
    

    【讨论】:

      【解决方案2】:

      您需要刷新才能将数据写入文件。您还可以考虑在编写器中添加 using 语句以在完成后释放资源。

      public void doStuff()
      {
        AverageValues AVS = new AverageValues();
        AVS.Bull = "Woof";
        string path = "C:\\users\\kjenks11\\Averages.txt";
        using (var NewFile = File.Create(path))
        {
          using (var writeIt = new StreamWriter(NewFile))
          {
            List<AverageValues> AV = new List<AverageValues> {AVS};
            foreach (var value in AV)
            {
              writeIt.Write(value.Bull);
            }
          }
        }
      }
      

      【讨论】:

        【解决方案3】:

        如果您在流周围使用using,则无需显式调用刷新和关闭。一旦您离开 using 块的范围,流将被关闭和处置。 close 将为您调用 flush。

          public void doStuff()
            {
                AverageValues AVS = new AverageValues();
                AVS.Bull = "Woof";
                string path = "C:\\users\\kjenks11\\Averages.txt";
                FileStream NewFile = File.Create(path);
                List<AverageValues> AV = new List<AverageValues>();
                AV.Add(AVS);
        
                using(StreamWriter writeIt = new StreamWriter(NewFile))
                {
                   foreach (var value in AV)
                   {
                        writeIt.Write(value.Bull);
                   } 
                }
               NewFile.Close();
            }
        

        【讨论】:

        • 您可以像@EJC 帖子一样在 FileStream 上使用using,但至少我会将NewFile.Close() 移动到using 块下方。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-08-18
        • 2012-07-28
        • 2011-01-11
        • 2023-03-06
        • 1970-01-01
        • 2014-03-25
        相关资源
        最近更新 更多