| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140 |
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- namespace crusherScanner
- {
- internal class WorkingDirControl
- {
- /// <summary>
- /// Update sample as scanned in the working directory.
- /// </summary>
- /// <param name="e">Sample data containing Job and Barcode.</param>
- 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(JobFile, $"{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.
- }
- }
- /// <summary>
- /// Is the currently scanned sample's job in the working directory.
- /// </summary>
- /// <param name="scanData">Sample data containing Job and Barcode.</param>
- /// <param name="DataDirs"></param>
- private static string? GetJobFilePath(Scan scanData,string[] DataDirs)
- {
- try
- {
- foreach (var DataDir in DataDirs)
- {
- if (Directory.Exists(DataDir))
- {
- // Pattern match is for 'ML003092.csv' or 'ML003092_20220822.csv'
- 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<string> 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)
- {
- if (scanData.Ins)
- {
- CSV[8] = "INS";
- }
- else
- {
- 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;
- }
- }
- }
|