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();//结束进程
}
}
}
}
}
C# 控制台 AMD LOG FILE读取并处理程式
最新推荐文章于 2022-07-24 20:00:43 发布