winforms 如何创建一个单一的csv日志文件,只要程序运行在C#?

v440hwme  于 2022-11-16  发布在  C#
关注(0)|答案(2)|浏览(137)

目前,我的程序每小时创建一个新的日志文件,文件名为当前日期和当前小时。

有两个缺点
1.例如,我运行程序3小时20分钟,并希望在一个单一的文件中有该持续时间的csv日志数据,但与目前的逻辑,它创建4个单独的csv文件。
1.如果上一个会话的结束和新会话的开始恰好在同一小时内,即使我希望获得新会话的单独csv日志数据,它也只是附加到现有文件中。
有没有什么方法可以摆脱这两个问题,但同时保持文件名,因为我现在正在做的?

outputFilePath = csv_directory + CurrentDate + "\\" + CurrentDate + "_" + CurrentHour + ".csv";

if (File.Exists(outputFilePath) == false) 
{
    using (System.IO.StreamWriter file = new System.IO.StreamWriter(outputFilePath, true))
    {
        // Write File
        // Column Header
        // Data
    }
}
else if (File.Exists(outputFilePath))
{
    using (System.IO.StreamWriter file = new System.IO.StreamWriter(outputFilePath, true))
    {
        // Write File
        // Data
    }
}
7rtdyuoh

7rtdyuoh1#

尝试以下解决方案
不要编辑用于每小时保存CSV文件的代码。代码仅用于每小时保存CSV文件。
下面👇是获取CSV文件的具体时长
1.首先在代码中创建单独代码,然后输入获取CSV文件的持续时间
然后找到保存该持续时间的CSV文件,从这些CSV文件中获取数据,创建新的CSV文件并插入到该新文件中
因此,使用这个解决方案,如果你想要任何持续时间的CSV文件,你会得到&你也有每小时的CSV文件。

ibrsph3r

ibrsph3r2#

您可以在Main方法中创建文件,并将路径存储在全局可访问的位置,例如

internal static class Program
{
    /// <summary>
    /// The main entry point for the application.
    /// </summary>
    [STAThread]
    static void Main()
    {
        logFilePath = Path.Combine(Application.StartupPath, $"Log_{DateTime.Now:dd-MM-yyyy-HH-mm-ss}.csv");

        File.WriteAllText(logFilePath, "file header here");

        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        Application.Run(new Form1());
    }

    public static string logFilePath;
}

然后,您可以调用File.AppendAllTextFile.AppendAllLines,在需要的位置和时间写入文件,使用Program.logFilePath作为文件路径。您甚至可以创建自己的专用类,其中包含文件路径并具有执行写入的方法,但我将把这些留给您。

相关问题