【问题标题】:how will the timer save the application start time and the application end time to text file?计时器如何将应用程序开始时间和应用程序结束时间保存到文本文件?
【发布时间】:2014-08-13 15:08:57
【问题描述】:

我必须制作一个将开始时间和停止时间写入文本文件的winform应用程序,以便文本文件中的数据可以用于在图表中显示。现在我已经设法让计时器在文本文件中写入开始和停止时间,但计时器会写入完整的持续时间

即; 8/13/2014 8:33:57 PM 8/13/2014 8:33:57 PM 8/13/2014 8:33:58 PM 8/13/2014 8:33:58 PM 8/13/2014 8:33:59 PM 8/13/2014 8:33:59 PM 8/13/2014 8:34:00 PM

但我希望计时器只写开始时间和结束时间。

using System;
using System.Windows.Forms;
using System.IO;
using System.Text;

namespace WindowsFormsApplication3
{
public partial class Form1 : Form
{

    public Form1()
    {
        InitializeComponent();
    }

    private void Form1_Load(object sender, EventArgs e)
    {

        timer1.Start();

    }


    private void timer1_Tick(object sender, EventArgs e)
    {

      FileStream fs = new FileStream(@"D:\Hello.txt", FileMode.Append, FileAccess.Write, FileShare.ReadWrite);
        //FileStream fs = new FileStream(@"E:\log{0:yyyy-MM-dd HH:mm:ss}.txt", FileMode.Append, FileAccess.Write, FileShare.ReadWrite),sb.ToString());
        StreamWriter sw = new StreamWriter(fs);
        sw.WriteLine(DateTime.Now.Hour);

        lbTimer.Items.Add(DateTime.Now.Hour+"Hours");
        lbTimer1.Items.Add(DateTime.Now.Minute+"M");
        lbTimer2.Items.Add(DateTime.Now.Second+"s");
        fs.Flush();
        sw.Close();
        fs.Close();

    }
}

}

【问题讨论】:

  • 为什么要使用计时器?如果您只需要开始时间和结束时间,为什么需要介于两者之间的刻度?在启动时,捕捉时间。近距离,捕捉时间。将它们都写入一个文件。
  • 你能告诉我代码吗?谢谢

标签: c# winforms text timer


【解决方案1】:
public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    private void Form1_Load(object sender, EventArgs e)
    {
        File.AppendAllText("D:\\Hello.txt", DateTime.Now.ToString());
    }

    private void Form1_FormClosed(object sender, FormClosedEventArgs e)
    {
        File.AppendAllText("D:\\Hello.txt", DateTime.Now.ToString());
    }
}

【讨论】:

  • File.WriteAllText 覆盖目标文件,如果它已经存在。
  • 它没有写关闭时间......!
【解决方案2】:

你可以试试这个……

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    private void Form1_Load(object sender, EventArgs e)
    {
        using (System.IO.StreamWriter streamWriter = new StreamWriter("Report.txt", false)) 
        {
            streamWriter.WriteLine(string.Format("Start Time : {0:yyyy-MM-dd HH:mm:ss}", DateTime.Now));
        }
    }

    private void Form_Closed(object sender, EventArgs e)
    {
        using (System.IO.StreamWriter streamWriter = new StreamWriter("Report.txt", true)) 
        {
            streamWriter.WriteLine(string.Format("End Time : {0:yyyy-MM-dd HH:mm:ss}", DateTime.Now));
        }
    }
}

【讨论】:

    【解决方案3】:

    这可能是一种选择,收集所有日期并写入文件一次:

            string path = @"yourpathhere";
            List<string> dates = new List<string>();
    
            public Form1()
            {
                InitializeComponent();
            }
    
            private void Form1_Load(object sender, EventArgs e)
            {
                dates.Add(DateTime.Now.ToString());
            }
    
            private void Form1_FormClosed(object sender, FormClosedEventArgs e)
            {
                dates.Add(DateTime.Now.ToString());
                File.WriteAllText(path, dates.Aggregate((d1, d2) => d1 + "\r\n" + d2));
            }
    

    【讨论】:

    • File.WriteAllText 覆盖目标文件,如果它已经存在。
    • 是的,为什么我向文件提供路径变量 OP 知道将数据写入其中不存在。这就是我写一次的原因。如果 OP 想要做更多然后一次应该使用 AppendAllText 但 OP 没有在问题中具体说明。
    • 当问题不那么精确时会发生这种情况。我知道 OP 希望将所有数据放在一个文件中以供进一步处理。没关系。 :)
    • @Thorias 也许你是对的,但问题不在于你的观点是 OP 没有具体说明那部分:)
    • 想想Aggregate 方法做了什么,以及在这个示例代码的上下文中什么是有意义的。该函数所做的只是在将两个日期写入文件之前用换行符将它们连接起来。如果您没有Aggregate,有很多方法可以做到这一点。我会把解决方案留给你。此外,此示例中 Aggregate 的参数称为 lambda 表达式。根据这里的问题和 cmets,OP 可能对此并不熟悉。
    猜你喜欢
    • 1970-01-01
    • 2018-04-07
    • 2012-01-19
    • 1970-01-01
    • 2021-10-04
    • 1970-01-01
    • 2021-05-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多