using WeldingCommon.Process; using WeldingCommon.Settings; using System; using System.Collections.Generic; using System.Globalization; using System.IO; using System.Linq; using System.Text; namespace WeldingCommon.Tools { public class CsvLogger { private readonly object _fileLock = new object(); private readonly string _dirPath; // 디렉터리 보관 private readonly string _fileNamePrefix; // 파일명 접두 (Default, 또는 인자) private readonly string _dateFormat = "yyyyMMdd"; private string _currentDate; // 마지막으로 쓴 날짜(yyyyMMdd) private string _filePath; // 현재 쓰는 파일 경로 public CsvLogger(string filepath = null, string fileName = null) { _dirPath = string.IsNullOrWhiteSpace(filepath) ? AppDomain.CurrentDomain.BaseDirectory : filepath; Directory.CreateDirectory(_dirPath); _fileNamePrefix = string.IsNullOrWhiteSpace(fileName) ? "Default" : fileName; lock (_fileLock) { UpdateFileDate(); } } private void UpdateFileDate() { string today = DateTime.Now.ToString(_dateFormat, CultureInfo.InvariantCulture); if (_currentDate == today && !string.IsNullOrEmpty(_filePath)) return; _currentDate = today; string safeName = $"{_fileNamePrefix}_{_currentDate}.csv"; _filePath = Path.Combine(_dirPath, safeName); if (!File.Exists(_filePath)) { File.AppendAllText(_filePath, "Time,Lot_ID,Cell_ID,Ng,Judge,HeightMeas1,HeightMeas2,HeightMeas3,HeightMeas4,HeightMeas5,HeightMeas6,HeightMeas7,HeightMeas8\n", Encoding.UTF8); } } public void WriteLine(string str) { lock (_fileLock) { UpdateFileDate(); string time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss", CultureInfo.InvariantCulture); string line = $"{time},{str}"; File.AppendAllText(_filePath, line + Environment.NewLine, Encoding.UTF8); } } public void WriteLineCellData(PalletInfo Cell) { var sb = new StringBuilder(); sb.Append(Cell.weldingData.LotId); sb.Append(","); sb.Append(Cell.weldingData.CellId); sb.Append(","); sb.Append(Cell.weldingData.NgJudge > 0); sb.Append(","); sb.Append(Cell.weldingData.NgReason); sb.Append(","); foreach (var heightMeas in Cell.weldingData.HeightMeasurements) { sb.Append(heightMeas); sb.Append(","); } WriteLine(sb.ToString()); //var inv = CultureInfo.InvariantCulture; //string data = string.Join(",", Cell.weldingData.HeightMeasurements.Select(d => d.ToString("G", inv))); //string line = $"{Cell.weldingData.LotId},{Cell.weldingData.CellId},{(Cell.weldingData.NgJudge > 0)},{Cell.weldingData.NgReason},{data}"; //WriteLine(line); } public string GetFilePath() { lock (_fileLock) { UpdateFileDate(); return _filePath; } } } }