using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace crusherScanner { internal class WorkingDirControl { /// /// Update sample as scanned in the working directory. /// /// Sample data containing Job and Barcode. public static void UpdateWorkingDir(System.ComponentModel.DoWorkEventArgs e) { if (e.Argument == null) { return; } Scan scanData = (Scan)e.Argument; string[] DataDirs = new string[2] { Properties.Settings.Default.OreDefWorkFile, Properties.Settings.Default.OreDefInFile }; string? JobFile = GetJobFilePath(scanData, DataDirs); if (JobFile != null) { if (JobFile.Contains(DataDirs[0])) { scanData = updateSampleInJobFile(scanData, JobFile); } else { try { File.Move($"{DataDirs[1]}\\{scanData.sampleData.Job}.csv", $"{DataDirs[0]}\\{scanData.sampleData.Job}.csv"); scanData = updateSampleInJobFile(scanData, $"{DataDirs[0]}\\{scanData.sampleData.Job}.csv"); } catch (Exception) { } } e.Result = scanData; } else { e.Result = scanData; // This shouldn't happen. } } /// /// Is the currently scanned sample's job in the working directory. /// /// Sample data containing Job and Barcode. /// private static string? GetJobFilePath(Scan scanData,string[] DataDirs) { try { foreach (var DataDir in DataDirs) { if (Directory.Exists(DataDir)) { var jobFiles = Directory.EnumerateFiles(DataDir, "ML??????.csv", SearchOption.TopDirectoryOnly); foreach (var jobFile in jobFiles) { if (jobFile.Contains(scanData.sampleData.Job)) { return jobFile; } } } } } catch (Exception ex) { MessageBox.Show("An error occurred." + Environment.NewLine + ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); } return null; } private static Scan updateSampleInJobFile(Scan scanData, string DataFile) { List fileLines = new(); using FileStream OreDefWorkingFile = new(DataFile, FileMode.Open, System.IO.FileAccess.ReadWrite, FileShare.None); { using StreamReader Reader = new(OreDefWorkingFile); { var line = Reader.ReadLine(); while (line != null) { if (line != null && line.Contains('\u002C')) { scanData.JobTotal++; string[] CSV = line.Split('\u002C'); if(CSV[0] == scanData.sampleData.Sid) { CSV[8] = scanData.sampleData.Sid; fileLines.Add(string.Join('\u002C', CSV)); } else { fileLines.Add(line); } // Count if sample has been scanned already if(CSV[8] != "") { scanData.JobCount++; } // set CSV to null to prevent data roll over CSV = null; } line = Reader.ReadLine(); } } OreDefWorkingFile.Position = 0; using StreamWriter writer = new(OreDefWorkingFile); { foreach (var line in fileLines) { writer.WriteLine(line); } } writer.Close(); } scanData.JobCount--; // Compensate for the file header scanData.JobTotal--; // Compensate for the file header return scanData; } } }