日志文件,DataTable导出csv文件

   public class TxtHelper
    {
        public TxtHelper()
        {
            _defauleDir = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Log");
            _msgs = new ConcurrentQueue<string>();
            _tasks = new Task[1];
        }

        public static bool TCPBuf = false;
        public static bool TCPSend = false;
        public static string LogFilePLC = string.Empty;
        private static object lockSync = new object();

        private string _defauleDir = string.Empty;
        private ConcurrentQueue<string> _msgs = null;
        private Task[] _tasks = null;

        public static TxtHelper _init = new TxtHelper();
        public static TxtHelper Init { get { return _init; } }

        public void WriteMsg(string fileName, string msg)
        {
            lock (lockSync)
            {
                var tmpDir = Path.GetDirectoryName(fileName);
                if (string.IsNullOrEmpty(tmpDir))
                    return;
                if (!Directory.Exists(tmpDir))
                {
                    Directory.CreateDirectory(tmpDir);
                }

                using (FileStream file = new FileStream(fileName, FileMode.Append, FileAccess.Write, FileShare.ReadWrite))
                {
                    StreamWriter bw = new StreamWriter(file);
                    bw.WriteLine(msg);
                    bw.Flush();
                    bw.Close();
                }
            }
        }

        public void WriteLog(string msg)
        {
            string fileName = Path.Combine(_defauleDir, "LogDebug", $"{DateTime.Now.ToString("yyyyMMdd")}-Log.txt");
            WriteMsg(fileName, $"[{DateTime.Now.ToString("HH:mm:ss")}]:{msg}");
        }

        /// <summary>
        /// 将数据导出到csv文件中
        /// </summary>
        /// <param name="fileName"></param>
        /// <param name="table"></param>
        public bool WriteCSV(string fileName, DataTable table)
        {
            if (table == null || table.Rows.Count < 1)
                return false;

            try
            {
                var tmpDir = Path.GetDirectoryName(fileName);
                if (!Directory.Exists(tmpDir))
                {
                    Directory.CreateDirectory(tmpDir);
                }
                using (FileStream file = new FileStream(fileName, FileMode.CreateNew, FileAccess.ReadWrite))
                {
                    StreamWriter bw = new StreamWriter(file, Encoding.GetEncoding("GB2312"));
                    foreach (DataColumn item in table.Columns)
                    {
                        bw.Write(item.ColumnName + ",");
                        bw.Flush();
                    }
                    bw.WriteLine();
                    foreach (DataRow row in table.Rows)
                    {
                        for (int i = 0; i < table.Columns.Count; i++)
                        {
                            bw.Write(row[i].ToString() + ",");
                        }
                        bw.WriteLine();
                        bw.Flush();
                    }
                    bw.Close();
                }
                return true;
            }
            catch (Exception)
            {
                return false;
            }
        }

        /// <summary>
        /// 将数据连续导出到csv文件中 
        /// </summary>
        /// <param name="fileName"></param>
        /// <param name="table"></param>
        /// <returns></returns>
        public bool DataWriteCSV(string fileName, DataTable table)
        {
            if (table == null || table.Rows.Count < 1)
                return false;

            try
            {
                var tmpDir = Path.GetDirectoryName(fileName);
                if (!Directory.Exists(tmpDir))
                {
                    Directory.CreateDirectory(tmpDir);
                }
                using (FileStream file = new FileStream(fileName, FileMode.Append, FileAccess.Write, FileShare.ReadWrite))
                {
                    StreamWriter bw = new StreamWriter(file, Encoding.GetEncoding("GB2312"));
                    foreach (DataRow row in table.Rows)
                    {
                        for (int i = 0; i < table.Columns.Count; i++)
                        {
                            bw.Write(row[i].ToString() + ",");
                        }
                        bw.WriteLine();
                        bw.Flush();
                    }
                    bw.Close();
                }
                return true;
            }
            catch (Exception)
            {
                return false;
            }
        }

        public void ExportToSvc(DataTable dt, string savaPath)
        {
            if (File.Exists(savaPath))
            {
                File.Delete(savaPath);
            }

            StringBuilder stringBuilder = new StringBuilder();
            StringBuilder stringBuilder2 = new StringBuilder();
            int num = 0;
            try
            {
                using (StreamWriter streamWriter = new StreamWriter(new FileStream(savaPath, FileMode.CreateNew), Encoding.GetEncoding("GB2312")))
                {
                    for (num = 0; num <= dt.Columns.Count - 1; num++)
                    {
                        stringBuilder.Append(dt.Columns[num].ColumnName);
                        stringBuilder.Append(",");
                    }

                    stringBuilder.Remove(stringBuilder.Length - 1, 1);
                    streamWriter.WriteLine(stringBuilder);
                    foreach (DataRow row in dt.Rows)
                    {
                        stringBuilder2.Remove(0, stringBuilder2.Length);
                        for (num = 0; num <= dt.Columns.Count - 1; num++)
                        {
                            stringBuilder2.Append(row[num].ToString());
                            stringBuilder2.Append(",");
                        }

                        stringBuilder2.Remove(stringBuilder2.Length - 1, 1);
                        streamWriter.WriteLine(stringBuilder2);
                    }
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        public void WriteDebugBuf(string debug)
        {
            string fileName = Path.Combine(_defauleDir, "LogDebug", $"{DateTime.Now.ToString("yyyyMMdd")}-Buf.txt");
            if (TCPBuf)
            {
                WriteMsg(fileName, debug);
            }
        }

        public void WriteDebugSend(string debug)
        {
            string fileName = Path.Combine(_defauleDir, "LogDebug", $"{DateTime.Now.ToString("yyyyMMdd")}-Buf.txt");
            if (TCPSend)
            {
                WriteMsg(fileName, debug);
            }
        }

        public void WritePro(string msg)
        {
            string fileName = Path.Combine(_defauleDir, "LogDebug", $"{DateTime.Now.ToString("yyyyMMdd")}-Pro.txt");
            WriteMsg(fileName, msg);
        }

        public void WriteError(string msg)
        {
            string fileName = Path.Combine(_defauleDir, "LogError", $"{DateTime.Now.ToString("yyyyMMdd")}-Error.txt");
            _msgs.Enqueue(msg);

            if (_tasks[0] == null || _tasks[0].IsCompleted)
            {
                _tasks[0] = Task.Run(() =>
                {
                    string tmpMsg;
                    while (_msgs.TryDequeue(out tmpMsg))
                    {
                        WriteMsg(fileName, $"[{DateTime.Now:yyyy-MM-dd HH:mm:ss}]:{tmpMsg}");
                        System.Threading.Thread.Sleep(10);
                    }
                });
            }
        }

        public void WriteError(string msg, Exception ex)
        {
            string fileName = Path.Combine(_defauleDir, "LogError", $"{DateTime.Now.ToString("yyyyMMdd")}-Error.txt");
            StringBuilder builder = new StringBuilder();
            builder.AppendLine($"[{DateTime.Now:yyyy-MM-dd HH:mm:ss}]:{msg}");
            if (ex != null)
            {
                builder.AppendLine($"[{DateTime.Now:yyyy-MM-dd HH:mm:ss}]:{ex.Message}");
                builder.AppendLine($"[{DateTime.Now:yyyy-MM-dd HH:mm:ss}]:{ex.StackTrace}");
            }
            _msgs.Enqueue(builder.ToString());

            if (_tasks[0] == null || _tasks[0].IsCompleted)
            {
                _tasks[0] = Task.Run(() =>
                {
                    string tmpMsg;
                    while (_msgs.TryDequeue(out tmpMsg))
                    {
                        WriteMsg(fileName, tmpMsg);
                        System.Threading.Thread.Sleep(10);
                    }
                });
            }
        }

        public void LogMes(string msg)
        {
            string fileName = Path.Combine(_defauleDir, "LogDebug", $"{DateTime.Now.ToString("yyyyMMdd")}-Mes.txt");
            WriteMsg(fileName, $"[{DateTime.Now.ToString("HH:mm:ss")}]:{msg}");
        }

        public void LogPLC(string msg)
        {
            LogFilePLC = Path.Combine(_defauleDir, "LogDebug", $"{DateTime.Now.ToString("yyyyMMdd")}-PLC.txt");
            WriteMsg(LogFilePLC, $"[{DateTime.Now.ToString("HH:mm:ss")}]:{msg}");
        }
    }

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值