退出控制台应用程序c#并写入日志

本文关键字:日志 控制台 应用程序 退出 | 更新日期: 2023-09-27 18:16:33

所以如果参数检查失败,我试图退出控制台应用程序,但是,我仍然希望它记录到一个文件。只要所有参数都是正确的,对文件的日志记录就可以正常工作。但是,当参数检查失败并到达System.Environment.Exit(0)部分时,日志文件仍然是完全空的。下面是目前为止的代码。请帮帮我,我已经试过所有我能想到的方法了。

    using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
namespace I2C_File_Splitter
{
    class Program
    {
        static void Main(string[] args)
        {
            //get command line input paramaters  
            using (StreamWriter log = File.AppendText("Splitter_log.txt"))
            {

                log.WriteLine(DateTime.Now + " ******************************************** SPLITTER STARTED ****************************************************************");
                log.WriteLine(DateTime.Now + " FILE: " + args[0] + " DESTINATION: " + args[1] + " MAX COUNT PER FILE: " + args[2]);

                if (args.Length == 0)
                    System.Environment.Exit(0);

                string originalFile = args[0];
                string destination = args[1];
                int fileLength = Convert.ToInt32(args[2]);
                string fileName;
                string fileExtension;
                string line;
                int fileNumber = 1;


                if (!File.Exists(originalFile))
                {
                    log.WriteLine(DateTime.Now + " Error: Transfund file not found for: " + args[0]);
                    log.WriteLine(DateTime.Now + " ******************************************** SPLITTER ENDED ****************************************************************");
                    System.Environment.Exit(0);
                }

                if (!Directory.Exists(destination))
                {
                    log.WriteLine(DateTime.Now + " Error: destination directory not found for: " + args[1] );
                    log.WriteLine(DateTime.Now + " ******************************************** SPLITTER ENDED ****************************************************************");
                    System.Environment.Exit(0);
                }

                if (fileLength < 0)
                {
                    log.WriteLine(DateTime.Now + " Error: file length must be greater than 0. Incorrect value " + args[2]);
                    log.WriteLine(DateTime.Now + " ******************************************** SPLITTER ENDED ****************************************************************");
                    System.Environment.Exit(0);
                }

                //get file name and file extension
                fileName = Path.GetFileNameWithoutExtension(originalFile);
                fileExtension = Path.GetExtension(originalFile);

                StreamReader file = new StreamReader(originalFile);
                log.WriteLine(DateTime.Now + " processing: " + fileName); 
                string header = file.ReadLine(); //get first line
                while ((line = file.ReadLine()) != null)
                {
                    StreamWriter newFile = new StreamWriter(destination + "''" + fileName + "_" + fileNumber.ToString() + fileExtension);
                    newFile.WriteLine(header);
                    newFile.WriteLine(line);
                    int counter = 1;
                    while (counter < fileLength)
                    {
                        line = file.ReadLine();
                        if (line == null)
                            break;
                        newFile.WriteLine(line);
                        counter++;
                    }
                    newFile.Close();
                    log.WriteLine(DateTime.Now + " " + fileName + "_" + fileNumber.ToString() + fileExtension + " created. Card count: " + counter);
                    fileNumber++;
                }
                log.WriteLine(DateTime.Now + " Processing completed: " + fileName);
                log.WriteLine(DateTime.Now + " ******************************************** SPLITTER ENDED ****************************************************************");
            }
        }
    }
}

退出控制台应用程序c#并写入日志

当你调用Environment.Exit时,你是在告诉它立即终止你的程序。

您的"日志"流永远不会被刷新(这将在您到达using块的末尾时发生),因此没有任何内容有机会写入文件。

在调用exit之前尝试刷新流。

if (!Directory.Exists(destination))
{
    log.WriteLine(DateTime.Now + " Error: destination directory not found for: " + args[1] );
    log.WriteLine(DateTime.Now + " ******************************************** SPLITTER ENDED ****************************************************************");
    // write all pending log messages to the file
    log.Flush();
    System.Environment.Exit(0);
}