C# 控制台 AMD LOG FILE读取并处理程式

using System;
using System.IO;
using System.Drawing;
using System.Linq;
using System.Collections;
using System.Collections.Generic;
using System.Text;
using System.Threading.Tasks;
using System.Web;
using System.Windows;
using System.Data;
using System.Diagnostics;

namespace Check_AMD_LogFile.V2._00
{
    public class Program
    {
        //第一阶段获取的配置数据
        public static String FileName_Name = String.Empty;
        public static List<String> Cfg_Args_Title;//配置文件参数表头
        public static List<List<String>> Cfg_Args_Values;//配置文件参数值
        public static int Test_Way = 0;//设置状态用于常温度温切换开关
        public static String ReadLogFileName=String.Empty;//读取LogFile文件路径
        public static String Copy_Log_Path=String.Empty;//拷贝LogFile到服务器的路径
        public static int Total_Row = 0;//设置数据总行数,当数据行数不满足时自动补全

        //第二阶段 获取的LogFile第一次过滤后的数据
        public static int Source_Dtat_TotalRows = 0;//原始数据总行数
        public static List<String> FirstGetDataSource;//获取LogFile
        public static String Last_Rows_Date;//获取最后一行数据时间字符串
        public static List<int> Standard_Args_Index;//需要判断参数的值置
        public static String File_CreationTime = String.Empty;//文件创建时间
        public static String File_LastWriteTime = String.Empty;//文件最后定入时间
        public static String File_LastAccesssTime = String.Empty;//文件最后访问题时间

        //第三阶段 判断数据是否满足上下线需求
        public static List<Double> Data_Each_Args_Total;

        //第四阶段 比较平均值

        //第五阶段确认是否增加数据量
        public static int Add_Data_Rows=0;
        public static List<String> Add_Data;//添加的数据
        public static DateTime NowDataTime;//当前数据时间

        //第六阶段COPY测试数据
        public static String BarCode_SN_Str = String.Empty;//SN条码字符串
        static int Main(string[] args)
        {
            Judge_Program_IsStart();//判断是否启动进程
            if (ReadLogFileData("Check_AMD_LogFile.config"))//读取配置文件
            {
                if (GetLogFile_Primitive_PassData(ReadLogFileName))//第一轮数据过滤读取
                {
                    Data_Each_Args_Total = new List<double>();
                    foreach (String tt in Cfg_Args_Title)//初始化参数总值存储项
                        Data_Each_Args_Total.Add(0.00);
                    if (comparative_Data(FirstGetDataSource))//第二轮数据上下线比较
                    {
                        if (Compare_Average_Value(Data_Each_Args_Total))//第三轮平均值比较
                        {
                            int DataRow = Total_Row - Source_Dtat_TotalRows;
                            if (DataRow > 5)//判断是否需要增加数据
                            {
                                Random rd = new Random();//获取随机数
                                int r = rd.Next(DataRow-4,DataRow-1);
                                if (!Add_Test_Data(r))//增加测试数据
                                    return 1;
                            }
                            if (GetBarCode_Name())//获取条码SN字符串
                            {
                                if (CopyLogFile())
                                {
                                    return 0;
                                }
                                else
                                {
                                    return 1;
                                }
                            }
                            else
                            {
                                return 1;
                            }
                        }
                    }
                }
            }
            return 1;
        }

        public static Boolean CopyLogFile()//Copy logFile
        {
            Boolean Falg = true ;
            if (!Directory.Exists(Copy_Log_Path))
            {
                if (!Local_Area_Network_ConnectState(Copy_Log_Path, "admin", "test"))
                {
                    Console.ForegroundColor = ConsoleColor.Red;
                    Console.WriteLine("Connect "+Copy_Log_Path+ " The Shared Directory Fail!!");
                    Console.ResetColor();
                    Falg = false;
                }
            }
            if (File.Exists(Copy_Log_Path + @"\" + BarCode_SN_Str + @".csv"))
                File.Delete(Copy_Log_Path + @"\" + BarCode_SN_Str + @".csv");
            File.Copy(ReadLogFileName, Copy_Log_Path + @"\" + BarCode_SN_Str + @".csv");
            if (File.Exists(Copy_Log_Path + @"\" + BarCode_SN_Str + @".csv"))
            {
                Console.ForegroundColor = ConsoleColor.Green;
                Console.WriteLine(Copy_Log_Path + @"\" + BarCode_SN_Str + @".csv" + " Directory Succeed!!");
                Falg = true;
            }
            else
            {
                Console.ForegroundColor = ConsoleColor.Red;
                Console.WriteLine(Copy_Log_Path + @"\" + BarCode_SN_Str + @".csv" + " Directory Fail!!");
                Console.ResetColor();
                Falg = false;
            }
            return Falg;
        }
        public static Boolean GetBarCode_Name()//获取SN条码
        {
            Boolean Flag = true;
            BarCode_SN_Str = String.Empty;
            if (Total_Row == 1)
            {
                while (BarCode_SN_Str.Length < 5)
                {
                    Console.Clear();
                    Console.ForegroundColor = ConsoleColor.DarkYellow;
                    Console.Write("Please Input SN Bar Code:");
                    BarCode_SN_Str = Console.ReadLine();
                }
            }
            else
            {
                if (File.Exists("SN.DAT"))
                {
                    FileStream fs = new FileStream("SN.DAT", FileMode.Open, FileAccess.Read);
                    StreamReader sr = new StreamReader(fs, Encoding.Default);
                    try
                    {
                        BarCode_SN_Str = sr.ReadLine();
                        if (BarCode_SN_Str == String.Empty || BarCode_SN_Str == null || BarCode_SN_Str == "")
                        {
                            Console.ForegroundColor = ConsoleColor.Red;
                            Console.WriteLine("Read SN.DAT Info Is NULL");
                            Console.ResetColor();
                            Flag = false;
                            return Flag;
                        }
                    }
                    catch (Exception ex)
                    {
                        Console.ForegroundColor = ConsoleColor.Red;
                        Console.WriteLine("Get Bar Code SN:" + ex.Message);
                        Console.ResetColor();
                        Flag = false;
                        return Flag;
                    }
                    finally
                    {
                        fs.Close();
                        sr.Close();
                    }
                }
                else
                {
                    Console.ForegroundColor = ConsoleColor.Red;
                    Console.WriteLine("Not Find SN.DAT File!!");
                    Console.ResetColor();
                    Flag = false;
                }
            }
            return Flag;
        }
        public static Boolean Add_Test_Data(int count)//增加测试数据
        {
            Boolean Flag = true;
            try
            {
                List<List<String>> Random_Values = new List<List<String>>();//存储随机值
                Add_Data = new List<string>();
                for (int n = FirstGetDataSource.Count / 2; n < FirstGetDataSource.Count; n++)//分离数据
                {
                    List<String> Temp = new List<string>();
                    String[] Array_Str = FirstGetDataSource[n].Split(new String[] { ","," "}, StringSplitOptions.RemoveEmptyEntries);
                    for (int i = 1; i < Array_Str.Length; i++)
                    {
                        String[] ss = Array_Str[i].Split(new String[] { "."}, StringSplitOptions.RemoveEmptyEntries);
                        foreach (String s in ss)
                            Temp.Add(s);
                    }
                    Random_Values.Add(Temp);
                }
                for (int x = 0; x < count; x++)
                {
                    String Group_Values = String.Empty;
                    Group_Values=Create_Refresh_Date(x + 1)+@", ";
                    for (int s = 0; s < Random_Values[0].Count; s+=2)
                    {
                        Random rs = new Random();
                        int v = rs.Next(0, Random_Values.Count-1);
                        int v1 = rs.Next(0,Random_Values.Count - 1);
                        if (s < Random_Values[0].Count - 2)
                            Group_Values += Random_Values[v][s] + @"." + Random_Values[v1][s + 1] + @", ";
                        else
                            Group_Values += Random_Values[v][s] + @"." + Random_Values[v1][s + 1];
                    }
                    Add_Data.Add(Group_Values);
                }
                if (!Add_LogFile_Data(ReadLogFileName, Add_Data)) Flag = false;//添加数据
            }
            catch (Exception ex)
            {
                Console.ForegroundColor = ConsoleColor.Red;
                Console.WriteLine(ex.Message);
                Console.WriteLine("Data Add "+count.ToString()+"Item Fail!!");
                Console.ResetColor();
            }
            return Flag;
        }

        public static Boolean Add_LogFile_Data(String FileName,List<String>AddDataSuourc)//添加测试数据
        {
            Boolean Flag = true;
            FileStream fs = new FileStream(FileName,FileMode.Append,FileAccess.Write);
            StreamWriter sw = new StreamWriter(fs); ;
            try
            {
                foreach (String ss in AddDataSuourc)
                    sw.WriteLine(ss);

            }
            catch (Exception ex)
            {
                Console.ForegroundColor = ConsoleColor.Red;
                Console.WriteLine("Add "+FileName+" "+ex.Message);
                Console.ResetColor();
                Flag = false;
            }
            finally
            {
                sw.Close();
                fs.Close();
                File.SetCreationTime(FileName,DateTime.Parse(File_CreationTime+NowDataTime.ToString("HH:mm:ss.fff")));
                File.SetLastWriteTime(FileName,DateTime.Parse(File_LastWriteTime+NowDataTime.ToString("HH:mm:ss.fff")));
                File.SetLastAccessTime(FileName,DateTime.Parse(File_LastAccesssTime+NowDataTime.ToString("HH:mm:ss.fff")));
            }
            return Flag;
        }
        public static String Create_Refresh_Date(int AddTime)//生成递增时间
        {
            String Temp = String.Empty;
            String[] Tt_Str = Last_Rows_Date.Split(new String[] { "." }, StringSplitOptions.RemoveEmptyEntries);
            String[] ff_Str =
           {".054",".055",".056",".057",".058",".059",".060",".061",".062",
            ".063",".064",".065",".066",".067",".068",".069",".070",".071",
            ".072",".073",".074",".075",".076",".077",".078",".079",".080",
            ".081",".082",".083",".084",".085",".086",".087",".088",".089",
            ".090",".091",".092",".093",".094",".095",".096",".097",".098"};
            Random rd = new Random();
            int y = rd.Next(0,44);
            DateTime st = DateTime.Parse(Tt_Str[0]+ff_Str[y]);
            Temp=st.AddSeconds(AddTime).ToString("HH:mm:ss.fff");
            NowDataTime = st.AddSeconds(AddTime);
            return Temp;
        }
        public static Boolean Compare_Average_Value(List<Double>Data_Each_Total)//比较平均值
        {
            Boolean Flag = true;
            int t = 0;
            foreach(List<String> vv in Cfg_Args_Values)
            {
                if (Convert.ToDouble(vv[4]) > 0)
                {
                    if ((Data_Each_Total[t] / FirstGetDataSource.Count) < Convert.ToDouble(vv[4]))
                    {
                        Console.WriteLine(Cfg_Args_Title[t]+" Average Value Compare:");
                        Console.ForegroundColor = ConsoleColor.Red;
                        Console.WriteLine(Cfg_Args_Title[t]+ " Average Value:"+ (Data_Each_Total[t] / FirstGetDataSource.Count).ToString()
                            +@"<"+ vv[4]+" Test Fail!!");
                        Console.ResetColor();
                        Flag = false;
                        return Flag;
                    }
                }
                t++;
            }
            Console.ForegroundColor = ConsoleColor.Green;
            Console.WriteLine("Average Value Compare Test Pass!!");
            Console.ResetColor();
            return Flag;
        }

        public static Boolean comparative_Data(List<String> DataSource)//比较数据是否满足上下线需求
        {
            Boolean Flag = true;
            foreach (String dd in DataSource)
            {
                String[] Array_Str = dd.Split(new String[] {","},StringSplitOptions.RemoveEmptyEntries);
                int v = 0;
                foreach (int ii in Standard_Args_Index)
                {
                    //Console.WriteLine(Array_Str[ii]+" "+ Cfg_Args_Values[v][2]+"~~~"+ Cfg_Args_Values[v][3]);
                    if (Convert.ToDouble(Array_Str[ii]) < Convert.ToDouble(Cfg_Args_Values[v][2]) ||
                        Convert.ToDouble(Array_Str[ii]) > Convert.ToDouble(Cfg_Args_Values[v][3]))//比较字符串上下线
                    {
                        Console.WriteLine(Cfg_Args_Title[v]+ " Up-down Comparison:");
                        Console.ForegroundColor = ConsoleColor.Red;
                        Console.WriteLine(Array_Str[0] + " Item Compare Values:" + Cfg_Args_Values[v][2] + " ~ " + Cfg_Args_Values[v][3] + "   " + Array_Str[ii]);
                        Console.ResetColor();
                        Flag = false;
                        return Flag;
                    }
                    Data_Each_Args_Total[v] += Convert.ToDouble(Array_Str[ii]);//合算总数值
                    v++;
                }
            }
            Console.ForegroundColor = ConsoleColor.Green;
            Console.WriteLine("The Second Round Of Data Up And Down Through The Line!!");
            Console.ResetColor();
            return Flag;
        }
        public static Boolean GetLogFile_Primitive_PassData(String FileName)//获取最初始条件通过的LogFile数据
        {
            Boolean Flag = false;
            FileInfo fi = new FileInfo(FileName);
            File_CreationTime = fi.CreationTime.ToString("yyyy-MM-dd ");
            File_LastWriteTime = fi.LastWriteTime.ToString("yyyy-MM-dd ");
            File_LastAccesssTime = fi.LastAccessTime.ToString("yyyy-MM-dd ");
            FileStream fs = new FileStream(FileName,FileMode.Open,FileAccess.Read);
            StreamReader sr = new StreamReader(fs,Encoding.Default);
            try
            {
                String Temp = String.Empty;
                Standard_Args_Index = new List<int>();
                FirstGetDataSource = new List<string>();//第一次获取数据
                int n = 0;
                while ((Temp = sr.ReadLine()) != null)
                {
                    String[] Array_Str = Temp.Split(new String[] {","},StringSplitOptions.RemoveEmptyEntries);
                    if (n == 0)
                    {
                        foreach (String ss in Cfg_Args_Title)//判断对应参数,在数据中的位置
                        {
                            int x = 0;
                            foreach (String aa in Array_Str)
                            {
                                if (aa.ToUpper().Contains(ss.ToUpper()))
                                    Standard_Args_Index.Add(x);
                                x++;
                            }
                        }
                    }
                    else
                    {
                        Boolean Begin_to_Value = true;//开始取值
                        int a = 0;
                        foreach (int ii in Standard_Args_Index)
                        {
                            if (Convert.ToDouble(Array_Str[ii]) <= Convert.ToDouble(Cfg_Args_Values[a][1]))
                                Begin_to_Value = false;
                            a++;
                        }
                        if (Begin_to_Value)
                            FirstGetDataSource.Add(Temp);
                    }
                    Last_Rows_Date = Array_Str[0];
                    n++;
                    Source_Dtat_TotalRows++;
                }
                Console.ForegroundColor = ConsoleColor.Green;
                Console.WriteLine(FileName+":Frist Log File Data Read Total "+ FirstGetDataSource.Count.ToString()+" Rows.");
                Console.ResetColor();
                Flag = true;
            }
            catch (Exception ex)
            {
                Console.ForegroundColor = ConsoleColor.Red;
                Console.WriteLine(FileName + " " + ex.Message);
                Console.ResetColor();
                Flag = false;
            }
            finally
            {
                sr.Close();
                fs.Close();
            }
            return Flag;
        }
        public static Boolean ReadLogFileData(String FileName)//读取配置文件
        {
            Boolean Flag = false;
            FileStream fs = new FileStream(FileName,FileMode.Open,FileAccess.Read);
            StreamReader sr = new StreamReader(fs,Encoding.Default);
            Cfg_Args_Title = new List<string>();//配置头文件值
            Cfg_Args_Values = new List<List<String>>();//配置参数值
            try
            {
                int n = 0;
                String Temp = String.Empty;
                while ((Temp = sr.ReadLine()) != null)
                {
                    String[] Array_Str = Temp.Split(new String[] { "="},StringSplitOptions.RemoveEmptyEntries);
                    if (n == 0)
                        ReadLogFileName = Array_Str[1];
                    else if (n == 1)
                        Copy_Log_Path = Array_Str[1];
                    else if (n == 2)
                        Test_Way = Convert.ToInt32(Array_Str[1]);
                    else if (n == 3)
                        Total_Row = Convert.ToInt32(Array_Str[1]);
                    else
                    {
                        List<String> ArgVa = new List<String>();
                        Cfg_Args_Title.Add(Array_Str[0]);
                        String[] ArgVas = Array_Str[1].Split(new String[] { "," }, StringSplitOptions.RemoveEmptyEntries);
                        foreach (String aa in ArgVas)
                            ArgVa.Add(aa);
                        Cfg_Args_Values.Add(ArgVa);
                    }
                    n++;
                }
                Console.ForegroundColor = ConsoleColor.Green;
                Console.WriteLine(FileName+" Config Read Succeed!!");
                Console.ResetColor();
                Flag = true;
            }
            catch (Exception ex)
            {
                Console.ForegroundColor = ConsoleColor.Red;
                Console.WriteLine(FileName+" "+ex.Message);
                Console.ResetColor();
                Flag = false;
            }
            finally
            {
                sr.Close();
                fs.Close();
            }
            return Flag;
        }
        public static void ShowFileInfo(String FileStr, int Item)//显示测试结果
        {
            if (Item == 1)
                Console.ForegroundColor = ConsoleColor.Red;
            else if (Item == 2)
                Console.ForegroundColor = ConsoleColor.Green;
            Console.WriteLine(FileStr);
            Console.ResetColor();
        }
        public static Boolean Local_Area_Network_ConnectState(String Path, String UserName, String Password)//局域网连接
        {
            Boolean Flag = false;
            Process proc = new Process();
            try
            {
                proc.StartInfo.FileName = "cmd.exe";
                proc.StartInfo.UseShellExecute = false;
                proc.StartInfo.RedirectStandardInput = true;
                proc.StartInfo.RedirectStandardOutput = true;
                proc.StartInfo.RedirectStandardError = true;
                proc.StartInfo.CreateNoWindow = true;
                proc.Start();
                String dosLine = "net use " + Path + " " + Password + " /user:" + UserName;
                proc.StandardInput.WriteLine(dosLine);
                proc.StandardInput.WriteLine("exit");
                while (!proc.HasExited)
                {
                    proc.WaitForExit(1000);
                }
                string errormsg = proc.StandardError.ReadToEnd();
                proc.StandardError.Close();
                if (string.IsNullOrEmpty(errormsg))
                {
                    Flag = true;
                }
                else
                {
                    //throw new Exception(errormsg);
                    Console.ForegroundColor = ConsoleColor.Red;
                    Console.WriteLine(errormsg);
                    Console.ResetColor();
                    Flag = false;
                }
            }
            catch (Exception ex)
            {
                Console.ForegroundColor = ConsoleColor.Red;
                Console.WriteLine(ex.Message);
                Console.ResetColor();
                Flag = false;
            }
            finally
            {
                proc.Close();
                proc.Dispose();
            }
            return Flag;
        }

        public static void HelpInfo()//帮忙信息
        {
            Console.Clear();
            Console.ForegroundColor = ConsoleColor.DarkGreen;
            Console.WriteLine("Windows Check AMD Log File Test Program V1.0 -Ferex Incorporation,By BO,2019.09.11");
            Console.ResetColor();
            Console.WriteLine("=========================================================================================");
            Console.WriteLine("Usage:Check Log File Test Program -Ferex Incorporation,By ShenBo,2019-09-11");
            Console.WriteLine(@"[Command]");
            Console.WriteLine(@"[Exanoke]:");
            Console.WriteLine(FileName_Name + " 1E411_45");
            Console.WriteLine("=========================================================================================");
        }

        public static void Judge_Program_IsStart()//确认当前程式是否已启动
        {
            String strFileName = System.Diagnostics.Process.GetCurrentProcess().ProcessName;//读取执行文件全路径
            String[] Array_Str = strFileName.Split(new[] { @"\" }, StringSplitOptions.RemoveEmptyEntries);//截取字符串
            System.Diagnostics.Process[] myProcesses = System.Diagnostics.Process.GetProcessesByName(Array_Str[Array_Str.Length - 1]);
            if (myProcesses.Length > 1)//判断程式是否启动
            {
                //KillProcess(KILLFileName);
                KillProcess(Array_Str[Array_Str.Length - 1]);
            }
            FileName_Name = Array_Str[Array_Str.Length - 1];
        }
        //判断是否启动进程并关闭
        public static void KillProcess(string RunBathName)
        {
            Process[] pro = Process.GetProcesses(); //获取已开启的所有进程
            for (int i = 0; i < pro.Length; i++)
            {
                //判断此进程是否是要查看的进程
                if (pro[i].ProcessName.ToString().ToString() == RunBathName)
                {
                    pro[i].Kill();//结束进程
                }
            }
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值